From 63815f9f22f03dbf1d5ad7d09bf3e1b11fe2ab71 Mon Sep 17 00:00:00 2001 From: Amaury Liet Date: Tue, 3 Sep 2019 13:08:54 +0200 Subject: [PATCH] feat: do not raise generic spacing on line break (#430) * feat: Allow multiline formatting for generic-spacing ("never" config) * chore: Make sure all contributors have the same dependencies version * docs: Auto-generate readme * docs: Explain to future contributors that they should re-generating the readme * Delete yarn.lock --- CONTRIBUTING.md | 4 ++++ README.md | 6 +++++ src/rules/genericSpacing.js | 28 ++++++++++++++---------- tests/rules/assertions/genericSpacing.js | 6 +++++ 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f481dbb5..455849da 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,6 +31,10 @@ Run them with `npm test`. Run with `npm run lint`. +## Submitting a PR + +Just before submitting a PR, run `npm run create-readme` to generate the new README.md + ## Adding a Rule ### Source & Tests diff --git a/README.md b/README.md index 6be71739..fb42b1f3 100644 --- a/README.md +++ b/README.md @@ -1328,6 +1328,12 @@ type X = Promise<(string)> type X = Promise<(foo), bar, (((baz)))> +type X = Promise< + (foo), + bar, + (((baz))), +> + // Options: ["always"] type X = Promise< string > diff --git a/src/rules/genericSpacing.js b/src/rules/genericSpacing.js index dcc270d4..5c989b91 100644 --- a/src/rules/genericSpacing.js +++ b/src/rules/genericSpacing.js @@ -31,21 +31,25 @@ const create = (context) => { if (never) { if (spacesBefore) { - context.report({ - data: {name: node.id.name}, - fix: spacingFixers.stripSpacesAfter(opener, spacesBefore), - message: 'There must be no space at start of "{{name}}" generic type annotation', - node: types, - }); + if (sourceCode.text[opener.end] !== '\n') { + context.report({ + data: {name: node.id.name}, + fix: spacingFixers.stripSpacesAfter(opener, spacesBefore), + message: 'There must be no space at start of "{{name}}" generic type annotation', + node: types, + }); + } } if (spacesAfter) { - context.report({ - data: {name: node.id.name}, - fix: spacingFixers.stripSpacesAfter(lastInnerToken, spacesAfter), - message: 'There must be no space at end of "{{name}}" generic type annotation', - node: types, - }); + if (sourceCode.text[closer.start - 1] !== '\n') { + context.report({ + data: {name: node.id.name}, + fix: spacingFixers.stripSpacesAfter(lastInnerToken, spacesAfter), + message: 'There must be no space at end of "{{name}}" generic type annotation', + node: types, + }); + } } } else { if (spacesBefore > 1) { diff --git a/tests/rules/assertions/genericSpacing.js b/tests/rules/assertions/genericSpacing.js index 12f97c12..164be670 100644 --- a/tests/rules/assertions/genericSpacing.js +++ b/tests/rules/assertions/genericSpacing.js @@ -129,6 +129,12 @@ export default { {code: 'type X = Promise'}, {code: 'type X = Promise<(string)>'}, {code: 'type X = Promise<(foo), bar, (((baz)))>'}, + {code: +`type X = Promise< + (foo), + bar, + (((baz))), +>`}, // Always