max-mapper / standard-format

converts your code into Standard JavaScript Format
264 stars 59 forks source link

Exception on valid for-loop #112

Closed febeling closed 7 years ago

febeling commented 9 years ago

I have a reduced test case, test.js, on which the formatter throws an exception:

for (var i = 0;
     i < 5;
     i++) {
}

This is the stacktrace:

$ standard --format test1.js
/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:5489
        throw e;
              ^
Error: Line 2: Unexpected identifier
    at throwError (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:2070:17)
    at throwUnexpected (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:2115:9)
    at expect (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:2142:9)
    at parseForStatement (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:3918:13)
    at parseStatement (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:4314:44)
    at parseSourceElement (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:5176:24)
    at parseSourceElements (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:5214:25)
    at parseProgram (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:5234:12)
    at Object.parse (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/espree/espree.js:5477:19)
    at Object.parse (/Users/febeling/.node/lib/node_modules/standard/node_modules/standard-format/node_modules/esformatter-semicolon-first/node_modules/rocambole/rocambole.js:69:31)

This is the affected version:

$ npm i -g standard
/Users/febeling/.node/bin/standard -> /Users/febeling/.node/lib/node_modules/standard/bin/cmd.js
standard@5.2.1 /Users/febeling/.node/lib/node_modules/standard
├── eslint-config-standard-react@1.0.4
├── eslint-config-standard@4.3.1
├── eslint-plugin-standard@1.3.0
├── eslint-plugin-react@3.3.1
├── standard-engine@2.0.7 (get-stdin@4.0.1, find-root@0.1.1, xtend@4.0.0, minimist@1.2.0, pkg-config@1.1.0, defaults@1.0.2, dezalgo@1.0.3, multiline@1.0.2, deglob@1.0.1)
├── standard-format@1.6.7 (esformatter-spaced-lined-comment@2.0.1, stdin@0.0.1, esformatter-quotes@1.0.3, minimist@1.2.0, esformatter-eol-last@1.0.0, esformatter-semicolon-first@1.1.0, deglob@1.0.1, esformatter-literal-notation@1.0.1, esformatter-jsx@2.0.11, esformatter@0.7.3)
└── eslint@1.3.1 (escape-string-regexp@1.0.3, path-is-absolute@1.0.0, object-assign@2.1.1, path-is-inside@1.0.1, xml-escape@1.0.0, user-home@1.1.1, strip-json-comments@1.0.4, estraverse-fb@1.3.1, globals@8.8.0, estraverse@4.1.0, text-table@0.2.0, is-resolvable@1.0.0, mkdirp@0.5.1, espree@2.2.4, debug@2.2.0, optionator@0.5.0, chalk@1.1.1, doctrine@0.6.4, concat-stream@1.5.0, minimatch@2.0.10, lodash.merge@3.3.2, lodash.clonedeep@3.0.2, is-my-json-valid@2.12.2, lodash.omit@3.1.0, handlebars@3.0.3, inquirer@0.9.0, js-yaml@3.4.1, escope@3.2.0)

Note that the exception isn't thrown if the loop parenthesis is kept on a single line.

Originally reported at: feross/standard#251

bcomnes commented 9 years ago

I wonder if its related to the semicolon removal/insertion plugins.

danse commented 9 years ago

Since the tool will explode without reporting the offending file, i recommend running it like this in order to isolate problematic files, as a temporary workaround:

find my-scripts/ -name '*.js' | while read file; do standard --format $file; done
feross commented 7 years ago

You should use standard --fix instead of this package. standard-format isn't being actively maintained anymore.