| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,3 +1,15 @@ | |||
| 1 | + ## 8.18.0 (2026-07-28) | ||
| 2 | + | ||
| 3 | + ### New features | ||
| 4 | + | ||
| 5 | + The new `startLocation` option can now be used to tell the parser the line and column the parse starts at (mostly useful with `parseExpressionAt`). | ||
| 6 | + | ||
| 7 | + ### Bug fixes | ||
| 8 | + | ||
| 9 | + Reject uses of `**` with a non-parenthesized arrow function as left-hand side. | ||
| 10 | + | ||
| 11 | + Avoid computing the start line in `parseExpressionAt` when locations aren't used. | ||
| 12 | + | ||
| 1 | 13 | ## 8.17.0 (2026-06-11) | |
| 2 | 14 | ||
| 3 | 15 | ### New features | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -137,6 +137,11 @@ required): | |||
| 137 | 137 | one-based line and zero-based column numbers in `{line, column}` | |
| 138 | 138 | form. Default is `false`. | |
| 139 | 139 | ||
| 140 | + - **startLocation**: An optional `{line, column}` object to use for | ||
| 141 | + the start of the parse. This is mostly useful when using | ||
| 142 | + `parseExpressionAt` with `locations: true`, to prevent the parser | ||
| 143 | + from having to determine the line position at the start position. | ||
| 144 | + | ||
| 140 | 145 | - **onToken**: If a function is passed for this option, each found | |
| 141 | 146 | token will be passed in same format as tokens returned from | |
| 142 | 147 | `tokenizer().getToken()`. | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -693,6 +693,14 @@ export interface Options { | |||
| 693 | 693 | */ | |
| 694 | 694 | locations?: boolean | |
| 695 | 695 | ||
| 696 | + /** | ||
| 697 | + * Pass an optional `{line, column}` object to use for the start of | ||
| 698 | + * the parse. This is mostly useful when using `parseExpressionAt` | ||
| 699 | + * with `locations: true`, to prevent the parser from having to | ||
| 700 | + * determine the line position at the start position. | ||
| 701 | + */ | ||
| 702 | + startLocation?: {line: number, column: number} | ||
| 703 | + | ||
| 696 | 704 | /** | |
| 697 | 705 | * a callback that will cause Acorn to call that export function with object in the same | |
| 698 | 706 | * format as tokens returned from `tokenizer().getToken()`. Note | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -693,6 +693,14 @@ export interface Options { | |||
| 693 | 693 | */ | |
| 694 | 694 | locations?: boolean | |
| 695 | 695 | ||
| 696 | + /** | ||
| 697 | + * Pass an optional `{line, column}` object to use for the start of | ||
| 698 | + * the parse. This is mostly useful when using `parseExpressionAt` | ||
| 699 | + * with `locations: true`, to prevent the parser from having to | ||
| 700 | + * determine the line position at the start position. | ||
| 701 | + */ | ||
| 702 | + startLocation?: {line: number, column: number} | ||
| 703 | + | ||
| 696 | 704 | /** | |
| 697 | 705 | * a callback that will cause Acorn to call that export function with object in the same | |
| 698 | 706 | * format as tokens returned from `tokenizer().getToken()`. Note | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -386,6 +386,11 @@ | |||
| 386 | 386 | // line being 1-based and column 0-based) will be attached to the | |
| 387 | 387 | // nodes. | |
| 388 | 388 | locations: false, | |
| 389 | + // Pass an optional `{line, column}` object to use for the start of | ||
| 390 | + // the parse. This is mostly useful when using `parseExpressionAt` | ||
| 391 | + // with `locations: true`, to prevent the parser from having to | ||
| 392 | + // determine the line position at the start position. | ||
| 393 | + startLocation: null, | ||
| 389 | 394 | // A function can be passed as `onToken` option, which will | |
| 390 | 395 | // cause Acorn to call that function with object in the same | |
| 391 | 396 | // format as tokens returned from `tokenizer().getToken()`. Note | |
@@ -539,13 +544,17 @@ | |||
| 539 | 544 | // Set up token state | |
| 540 | 545 | ||
| 541 | 546 | // The current position of the tokenizer in the input. | |
| 542 | - if (startPos) { | ||
| 543 | - this.pos = startPos; | ||
| 547 | + this.pos = startPos || 0; | ||
| 548 | + this.curLine = 1; | ||
| 549 | + if (options.startLocation) { | ||
| 550 | + this.lineStart = this.pos - options.startLocation.column; | ||
| 551 | + this.curLine = options.startLocation.line; | ||
| 552 | + } else if (startPos) { | ||
| 544 | 553 | this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1; | |
| 545 | - this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length; | ||
| 554 | + if (this.options.locations) | ||
| 555 | + { this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length; } | ||
| 546 | 556 | } else { | |
| 547 | - this.pos = this.lineStart = 0; | ||
| 548 | - this.curLine = 1; | ||
| 557 | + this.lineStart = 0; | ||
| 549 | 558 | } | |
| 550 | 559 | ||
| 551 | 560 | // Properties of the current token: | |
@@ -2888,7 +2897,7 @@ | |||
| 2888 | 2897 | } | |
| 2889 | 2898 | } | |
| 2890 | 2899 | ||
| 2891 | - if (!incDec && this.eat(types$1.starstar)) { | ||
| 2900 | + if (!incDec && !(expr.type === "ArrowFunctionExpression" && expr.start === startPos) && this.eat(types$1.starstar)) { | ||
| 2892 | 2901 | if (sawUnary) | |
| 2893 | 2902 | { this.unexpected(this.lastTokStart); } | |
| 2894 | 2903 | else | |
@@ -6258,7 +6267,7 @@ | |||
| 6258 | 6267 | // [ghbt]: https://github.com/acornjs/acorn/issues | |
| 6259 | 6268 | ||
| 6260 | 6269 | ||
| 6261 | - var version = "8.17.0"; | ||
| 6270 | + var version = "8.18.0"; | ||
| 6262 | 6271 | ||
| 6263 | 6272 | Parser.acorn = { | |
| 6264 | 6273 | Parser: Parser, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -380,6 +380,11 @@ var defaultOptions = { | |||
| 380 | 380 | // line being 1-based and column 0-based) will be attached to the | |
| 381 | 381 | // nodes. | |
| 382 | 382 | locations: false, | |
| 383 | + // Pass an optional `{line, column}` object to use for the start of | ||
| 384 | + // the parse. This is mostly useful when using `parseExpressionAt` | ||
| 385 | + // with `locations: true`, to prevent the parser from having to | ||
| 386 | + // determine the line position at the start position. | ||
| 387 | + startLocation: null, | ||
| 383 | 388 | // A function can be passed as `onToken` option, which will | |
| 384 | 389 | // cause Acorn to call that function with object in the same | |
| 385 | 390 | // format as tokens returned from `tokenizer().getToken()`. Note | |
@@ -533,13 +538,17 @@ var Parser = function Parser(options, input, startPos) { | |||
| 533 | 538 | // Set up token state | |
| 534 | 539 | ||
| 535 | 540 | // The current position of the tokenizer in the input. | |
| 536 | - if (startPos) { | ||
| 537 | - this.pos = startPos; | ||
| 541 | + this.pos = startPos || 0; | ||
| 542 | + this.curLine = 1; | ||
| 543 | + if (options.startLocation) { | ||
| 544 | + this.lineStart = this.pos - options.startLocation.column; | ||
| 545 | + this.curLine = options.startLocation.line; | ||
| 546 | + } else if (startPos) { | ||
| 538 | 547 | this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1; | |
| 539 | - this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length; | ||
| 548 | + if (this.options.locations) | ||
| 549 | + { this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length; } | ||
| 540 | 550 | } else { | |
| 541 | - this.pos = this.lineStart = 0; | ||
| 542 | - this.curLine = 1; | ||
| 551 | + this.lineStart = 0; | ||
| 543 | 552 | } | |
| 544 | 553 | ||
| 545 | 554 | // Properties of the current token: | |
@@ -2882,7 +2891,7 @@ pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forIni | |||
| 2882 | 2891 | } | |
| 2883 | 2892 | } | |
| 2884 | 2893 | ||
| 2885 | - if (!incDec && this.eat(types$1.starstar)) { | ||
| 2894 | + if (!incDec && !(expr.type === "ArrowFunctionExpression" && expr.start === startPos) && this.eat(types$1.starstar)) { | ||
| 2886 | 2895 | if (sawUnary) | |
| 2887 | 2896 | { this.unexpected(this.lastTokStart); } | |
| 2888 | 2897 | else | |
@@ -6252,7 +6261,7 @@ pp.readWord = function() { | |||
| 6252 | 6261 | // [ghbt]: https://github.com/acornjs/acorn/issues | |
| 6253 | 6262 | ||
| 6254 | 6263 | ||
| 6255 | - var version = "8.17.0"; | ||
| 6264 | + var version = "8.18.0"; | ||
| 6256 | 6265 | ||
| 6257 | 6266 | Parser.acorn = { | |
| 6258 | 6267 | Parser: Parser, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -16,7 +16,7 @@ | |||
| 16 | 16 | ], | |
| 17 | 17 | "./package.json": "./package.json" | |
| 18 | 18 | }, | |
| 19 | - "version": "8.17.0", | ||
| 19 | + "version": "8.18.0", | ||
| 20 | 20 | "engines": { | |
| 21 | 21 | "node": ">=0.4.0" | |
| 22 | 22 | }, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,5 +2,5 @@ | |||
| 2 | 2 | // Refer to tools/dep_updaters/update-acorn.sh | |
| 3 | 3 | #ifndef SRC_ACORN_VERSION_H_ | |
| 4 | 4 | #define SRC_ACORN_VERSION_H_ | |
| 5 | - #define ACORN_VERSION "8.17.0" | ||
| 5 | + #define ACORN_VERSION "8.18.0" | ||
| 6 | 6 | #endif // SRC_ACORN_VERSION_H_ | |
| Back | FazBrowse Home | New Git URL |
0 commit comments