prettier/tests/directives/jsfmt.spec.js

2 lines
40 B
JavaScript
Raw Normal View History

Preserve code unit sequence of directive literals (#1571) * Print directive literals verbatim This addresses https://github.com/prettier/prettier/issues/1555, but doesn't seem to pass the AST_COMPARE=1 tests: AST_COMPARE=1 npm test -- tests/quotes -t strings However, running `prettier --debug-check` on the relevant file *does* work: prettier tests/quotes/strings.js --debug-check * Change directive literal quotes if it doesn't contain quotes This addresses https://github.com/prettier/prettier/pull/1560#discussion_r115396257 From https://github.com/prettier/prettier/issues/1555#issue-227206837: > It's okay to change the type of quotation marks used, but only if doing so does not require changing any characters within the directive. * Don't change directive literal quotes if it contains a backslash This passes the `--debug-check` tests again: prettier tests/quotes/strings.js --debug-check * Try to add regression test for escaped directive literals This seems not to work, despite the following command having the correct output: echo "'\''" | prettier You can use the following to get an idea of how flow/typescript parse this: node -p "JSON.stringify(require('./src/parser').parse('\\'\\\\\'\\'', {parser: 'flow'}), null, 2)" node -p "JSON.stringify(require('./src/parser').parse('\\'\\\\\'\\'', {parser: 'typescript'}), null, 2)" * WIP Disable Flow/Typescript for ./tests/directives We don't yet handle escaped directives for them, but Babylon works. (similar to https://github.com/prettier/prettier/pull/602/commits/90bf93713c78a6a6b3f55e52d7be172ece9b56df#diff-0de18284f37da79ab8af4e4690919abaR1) * Revert "WIP Disable Flow/Typescript for ./tests/directives" This reverts commit 2aba6231271f6985a395c31e3df9323e8f3da115. * Prevent test strings from being parsed as directives See https://github.com/prettier/prettier/pull/1560#issue-227225960 * Add more escaped directive tests * Infer DirectiveLiterals from Flow parser * Don't test TypeScript on directives See https://github.com/prettier/prettier/pull/1560#issuecomment-300296221 * fixup! Infer DirectiveLiterals from Flow parser * Don't fake objects that look like a DirectiveLiteral Instead, add a flag to nodeStr() that deals with the Flow node accordingly. See https://github.com/prettier/prettier/pull/1560#discussion_r115605758 * Print preferred quotes around escaped DirectiveLiteral when it doesn't contain quotes See https://github.com/prettier/prettier/pull/1560#discussion_r115606122 * Simplify `canChangeDirectiveQuotes` logic * Add directive test with unnecessarily escaped non-quote character * Fix boolean logic error I thought that this would result in the following if-block executing, as needed to pass the test case in the previous commit. However, it appears that it's not actually needed to pass the test case, since `makeString` doesn't unescape unnecessarily escaped non-quote characters. Nevertheless, I think we should leave that if-block (`if (canChangeDirectiveQuotes)`) there, in case `makeString` is updated. See https://github.com/prettier/prettier/pull/1571#discussion_r115658398 * Make isFlowDirectiveLiteral a separate argument to nodeStr() See https://github.com/prettier/prettier/pull/1571#discussion_r115810988 * Simplify isFlowDirectiveLiteral logic by passing n.expression to nodeStr() See https://github.com/prettier/prettier/pull/1571#discussion_r115811216
2017-05-10 22:15:27 +03:00
run_spec(__dirname, null, ["babylon"]);