Skip to content

Commit

Permalink
fix: object-type-curly-spacing should not trim multi-line expressions (
Browse files Browse the repository at this point in the history
…#481)

Co-authored-by: Angelica Bocanegra <angelica.bocanegra@tabcorp.com.au>
  • Loading branch information
angelica-bocanegra and Angelica Bocanegra committed Apr 23, 2021
1 parent 7cabcda commit d2f6d9b
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 30 deletions.
17 changes: 16 additions & 1 deletion README.md
Expand Up @@ -2620,6 +2620,10 @@ type obj = {|"foo": "bar" |}
type obj = {"foo": "bar", [key: string]: string }
// Message: There should be no space before "}".

type obj = {
"foo": "bar", [key: string]: string }
// Message: There should be no space before "}".

type obj = { baz: {"foo": "qux"}, bar: 4}
// Message: There should be no space after "{".

Expand Down Expand Up @@ -2671,7 +2675,18 @@ type obj = {
foo: "bar"}

type obj = {
foo: "bar"}
foo: "bar"
}

type obj = {
foo: "bar",
ee: "bar",
}

type obj = {
foo: "bar",
ee: "bar",
}

type obj = {|"foo": "bar"|}

Expand Down
57 changes: 29 additions & 28 deletions src/rules/objectTypeCurlySpacing.js
Expand Up @@ -11,6 +11,10 @@ const meta = {
fixable: 'code',
};

const sameLine = (left, right) => {
return left.loc.end.line === right.loc.start.line;
};

const create = (context) => {
const never = (context?.options[0] ?? 'never') === 'never';
const sourceCode = context.getSourceCode();
Expand All @@ -31,33 +35,18 @@ const create = (context) => {
const spacesBefore = firstInnerToken.range[0] - opener.range[1];
const spacesAfter = closer.range[0] - lastInnerToken.range[1];

if (never) {
if (spacesBefore) {
if (sourceCode.text[opener?.range[1]] !== '\n') {
context.report({
data: {
token: opener.value,
},
fix: spacingFixers.stripSpacesAfter(opener, spacesBefore),
message: 'There should be no space after "{{token}}".',
node,
});
}
}
if (spacesAfter) {
if (sourceCode.text[closer?.range[0] - 1] !== '\n') {
context.report({
data: {
token: closer.value,
},
fix: spacingFixers.stripSpacesBefore(closer, spacesAfter),
message: 'There should be no space before "{{token}}".',
node,
});
}
}
} else {
if (!spacesBefore) {
// Check the opening brace
if (sameLine(opener, firstInnerToken)) {
if (never && spacesBefore) {
context.report({
data: {
token: opener.value,
},
fix: spacingFixers.stripSpacesAfter(opener, spacesBefore),
message: 'There should be no space after "{{token}}".',
node,
});
} else if (!never && !spacesBefore) {
context.report({
data: {
token: opener.value,
Expand All @@ -67,8 +56,20 @@ const create = (context) => {
node,
});
}
}

if (!spacesAfter) {
// Check the closing brace
if (sameLine(lastInnerToken, closer)) {
if (never && spacesAfter) {
context.report({
data: {
token: closer.value,
},
fix: spacingFixers.stripSpacesBefore(closer, spacesAfter),
message: 'There should be no space before "{{token}}".',
node,
});
} else if (!never && !spacesAfter) {
context.report({
data: {
token: closer.value,
Expand Down
11 changes: 10 additions & 1 deletion tests/rules/assertions/objectTypeCurlySpacing.js
Expand Up @@ -37,6 +37,13 @@ export default {
],
output: 'type obj = {"foo": "bar", [key: string]: string}',
},
{
code: 'type obj = {\n"foo": "bar", [key: string]: string }',
errors: [
{message: 'There should be no space before "}".'},
],
output: 'type obj = {\n"foo": "bar", [key: string]: string}',
},
{
code: 'type obj = { baz: {"foo": "qux"}, bar: 4}',
errors: [
Expand Down Expand Up @@ -144,7 +151,9 @@ export default {
{code: 'type obj = {foo: "bar"}'},
{code: 'type obj = {foo: "bar"\n}'},
{code: 'type obj = {\nfoo: "bar"}'},
{code: 'type obj = {\nfoo: "bar"}'},
{code: 'type obj = {\nfoo: "bar"\n}'},
{code: 'type obj = {\nfoo: "bar",\nee: "bar",\n}'},
{code: 'type obj = {\nfoo: "bar",\nee: "bar",\n }'},
{code: 'type obj = {|"foo": "bar"|}'},
{code: 'type obj = {"foo": "bar", [key: string]: string}'},

Expand Down

0 comments on commit d2f6d9b

Please sign in to comment.