Skip to content
This repository has been archived by the owner on Aug 4, 2020. It is now read-only.

Commit

Permalink
Update: Implement auto fix for object-curly-spacing (fixes #37)
Browse files Browse the repository at this point in the history
cherry picked form eslint/eslint/commit/1dcca0c95b894a91dc466ab5692292a99f717d54
  • Loading branch information
zaygraveyard committed Dec 20, 2015
1 parent e8d3bc0 commit 4fe9366
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 20 deletions.
42 changes: 34 additions & 8 deletions rules/object-curly-spacing.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,15 @@ module.exports = function(context) {
* @returns {void}
*/
function reportNoBeginningSpace(node, token) {
context.report(node, token.loc.start,
"There should be no space after '" + token.value + "'");
context.report({
node: node,
loc: token.loc.end,
message: "There should be no space after '" + token.value + "'",
fix: function(fixer) {
var nextToken = context.getSourceCode().getTokenAfter(token);
return fixer.removeRange([token.range[1], nextToken.range[0]]);
}
});
}

/**
Expand All @@ -75,8 +82,15 @@ module.exports = function(context) {
* @returns {void}
*/
function reportNoEndingSpace(node, token) {
context.report(node, token.loc.start,
"There should be no space before '" + token.value + "'");
context.report({
node: node,
loc: token.loc.start,
message: "There should be no space before '" + token.value + "'",
fix: function(fixer) {
var previousToken = context.getSourceCode().getTokenBefore(token);
return fixer.removeRange([previousToken.range[1], token.range[0]]);
}
});
}

/**
Expand All @@ -86,8 +100,14 @@ module.exports = function(context) {
* @returns {void}
*/
function reportRequiredBeginningSpace(node, token) {
context.report(node, token.loc.start,
"A space is required after '" + token.value + "'");
context.report({
node: node,
loc: token.loc.end,
message: "A space is required after '" + token.value + "'",
fix: function(fixer) {
return fixer.insertTextAfter(token, " ");
}
});
}

/**
Expand All @@ -97,8 +117,14 @@ module.exports = function(context) {
* @returns {void}
*/
function reportRequiredEndingSpace(node, token) {
context.report(node, token.loc.start,
"A space is required before '" + token.value + "'");
context.report({
node: node,
loc: token.loc.start,
message: "A space is required before '" + token.value + "'",
fix: function(fixer) {
return fixer.insertTextBefore(token, " ");
}
});
}

/**
Expand Down
51 changes: 39 additions & 12 deletions tests/object-curly-spacing.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
invalid: [
{
code: "import {bar} from 'foo.js';",
output: "import { bar } from 'foo.js';",
options: ["always"],
ecmaFeatures: {
modules: true
Expand All @@ -119,7 +120,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
message: "A space is required after '{'",
type: "ImportDeclaration",
line: 1,
column: 8
column: 9
},
{
message: "A space is required before '}'",
Expand All @@ -131,6 +132,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "export {bar};",
output: "export { bar };",
options: ["always"],
ecmaFeatures: {
modules: true
Expand All @@ -140,7 +142,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
message: "A space is required after '{'",
type: "ExportNamedDeclaration",
line: 1,
column: 8
column: 9
},
{
message: "A space is required before '}'",
Expand All @@ -154,6 +156,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
// always - arraysInObjects
{
code: "var obj = { 'foo': [ 1, 2 ] };",
output: "var obj = { 'foo': [ 1, 2 ]};",
options: ["always", {"arraysInObjects": false}],
errors: [
{
Expand All @@ -164,6 +167,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = { 'foo': [ 1, 2 ] , 'bar': [ 'baz', 'qux' ] };",
output: "var obj = { 'foo': [ 1, 2 ] , 'bar': [ 'baz', 'qux' ]};",
options: ["always", {"arraysInObjects": false}],
errors: [
{
Expand All @@ -176,6 +180,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
// always-objectsInObjects
{
code: "var obj = { 'foo': { 'bar': 1, 'baz': 2 } };",
output: "var obj = { 'foo': { 'bar': 1, 'baz': 2 }};",
options: ["always", {"objectsInObjects": false}],
errors: [
{
Expand All @@ -188,6 +193,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = { 'foo': [ 1, 2 ] , 'bar': { 'baz': 1, 'qux': 2 } };",
output: "var obj = { 'foo': [ 1, 2 ] , 'bar': { 'baz': 1, 'qux': 2 }};",
options: ["always", {"objectsInObjects": false}],
errors: [
{
Expand All @@ -202,6 +208,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
// always-destructuring trailing comma
{
code: "var { a,} = x;",
output: "var { a, } = x;",
options: ["always"],
ecmaFeatures: { destructuring: true },
errors: [
Expand All @@ -215,6 +222,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var {a, } = x;",
output: "var {a,} = x;",
options: ["never"],
ecmaFeatures: { destructuring: true },
errors: [
Expand All @@ -230,6 +238,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
// never-objectsInObjects
{
code: "var obj = {'foo': {'bar': 1, 'baz': 2}};",
output: "var obj = {'foo': {'bar': 1, 'baz': 2} };",
options: ["never", {"objectsInObjects": true}],
errors: [
{
Expand All @@ -242,6 +251,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = {'foo': [1, 2] , 'bar': {'baz': 1, 'qux': 2}};",
output: "var obj = {'foo': [1, 2] , 'bar': {'baz': 1, 'qux': 2} };",
options: ["never", {"objectsInObjects": true}],
errors: [
{
Expand All @@ -256,13 +266,14 @@ ruleTester.run('babel/object-curly-spacing', rule, {
// always & never
{
code: "var obj = {foo: bar, baz: qux};",
output: "var obj = { foo: bar, baz: qux };",
options: ["always"],
errors: [
{
message: "A space is required after '{'",
type: "ObjectExpression",
line: 1,
column: 11
column: 12
},
{
message: "A space is required before '}'",
Expand All @@ -274,18 +285,20 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = {foo: bar, baz: qux };",
output: "var obj = { foo: bar, baz: qux };",
options: ["always"],
errors: [
{
message: "A space is required after '{'",
type: "ObjectExpression",
line: 1,
column: 11
column: 12
}
]
},
{
code: "var obj = { foo: bar, baz: qux};",
output: "var obj = { foo: bar, baz: qux };",
options: ["always"],
errors: [
{
Expand All @@ -298,13 +311,14 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = { foo: bar, baz: qux };",
output: "var obj = {foo: bar, baz: qux};",
options: ["never"],
errors: [
{
message: "There should be no space after '{'",
type: "ObjectExpression",
line: 1,
column: 11
column: 12
},
{
message: "There should be no space before '}'",
Expand All @@ -316,6 +330,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = {foo: bar, baz: qux };",
output: "var obj = {foo: bar, baz: qux};",
options: ["never"],
errors: [
{
Expand All @@ -328,36 +343,39 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = { foo: bar, baz: qux};",
output: "var obj = {foo: bar, baz: qux};",
options: ["never"],
errors: [
{
message: "There should be no space after '{'",
type: "ObjectExpression",
line: 1,
column: 11
column: 12
}
]
},
{
code: "var obj = { foo: { bar: quxx}, baz: qux};",
output: "var obj = {foo: {bar: quxx}, baz: qux};",
options: ["never"],
errors: [
{
message: "There should be no space after '{'",
type: "ObjectExpression",
line: 1,
column: 11
column: 12
},
{
message: "There should be no space after '{'",
type: "ObjectExpression",
line: 1,
column: 18
column: 19
}
]
},
{
code: "var obj = {foo: {bar: quxx }, baz: qux };",
output: "var obj = {foo: {bar: quxx}, baz: qux};",
options: ["never"],
errors: [
{
Expand All @@ -376,6 +394,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "export const thing = {value: 1 };",
output: "export const thing = { value: 1 };",
ecmaFeatures: {
modules: true,
blockBindings: true
Expand All @@ -386,22 +405,23 @@ ruleTester.run('babel/object-curly-spacing', rule, {
message: "A space is required after '{'",
type: "ObjectExpression",
line: 1,
column: 22
column: 23
}
]
},

// destructuring
{
code: "var {x, y} = y",
output: "var { x, y } = y",
ecmaFeatures: {destructuring: true},
options: ["always"],
errors: [
{
message: "A space is required after '{'",
type: "ObjectPattern",
line: 1,
column: 5
column: 6
},
{
message: "A space is required before '}'",
Expand All @@ -413,6 +433,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var { x, y} = y",
output: "var { x, y } = y",
ecmaFeatures: {destructuring: true},
options: ["always"],
errors: [
Expand All @@ -426,14 +447,15 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var { x, y } = y",
output: "var {x, y} = y",
ecmaFeatures: {destructuring: true},
options: ["never"],
errors: [
{
message: "There should be no space after '{'",
type: "ObjectPattern",
line: 1,
column: 5
column: 6
},
{
message: "There should be no space before '}'",
Expand All @@ -445,6 +467,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var {x, y } = y",
output: "var {x, y} = y",
ecmaFeatures: {destructuring: true},
options: ["never"],
errors: [
Expand All @@ -458,6 +481,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var { x=10} = y",
output: "var { x=10 } = y",
ecmaFeatures: {destructuring: true},
options: ["always"],
errors: [
Expand All @@ -471,21 +495,23 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var {x=10 } = y",
output: "var { x=10 } = y",
ecmaFeatures: {destructuring: true},
options: ["always"],
errors: [
{
message: "A space is required after '{'",
type: "ObjectPattern",
line: 1,
column: 5
column: 6
}
]
},

// never - arraysInObjects
{
code: "var obj = {'foo': [1, 2]};",
output: "var obj = {'foo': [1, 2] };",
options: ["never", {"arraysInObjects": true}],
errors: [
{
Expand All @@ -496,6 +522,7 @@ ruleTester.run('babel/object-curly-spacing', rule, {
},
{
code: "var obj = {'foo': [1, 2] , 'bar': ['baz', 'qux']};",
output: "var obj = {'foo': [1, 2] , 'bar': ['baz', 'qux'] };",
options: ["never", {"arraysInObjects": true}],
errors: [
{
Expand Down

0 comments on commit 4fe9366

Please sign in to comment.