Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ node_modules
# generated output
lib/
**/.nyc_output/

# IDE files
.idea
1 change: 1 addition & 0 deletions docs/rules/newline-after-import.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# newline-after-import

Enforces having one or more empty lines after the last top-level import statement or require call.
+(fixable) The `--fix` option on the [command line] automatically fixes problems reported by this rule.

## Rule Details

Expand Down
8 changes: 7 additions & 1 deletion src/rules/newline-after-import.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ function isClassWithDecorator(node) {
module.exports = {
meta: {
docs: {},
fixable: 'whitespace',
schema: [
{
'type': 'object',
Expand All @@ -68,7 +69,8 @@ module.exports = {
}

const options = context.options[0] || { count: 1 }
if (getLineDifference(node, nextNode) < options.count + 1) {
const lineDifference = getLineDifference(node, nextNode)
if (lineDifference < options.count + 1) {
let column = node.loc.start.column

if (node.loc.start.line !== node.loc.end.line) {
Expand All @@ -81,6 +83,10 @@ module.exports = {
column,
},
message: `Expected empty line after ${type} statement not followed by another ${type}.`,
fix: fixer => fixer.insertTextAfter(
node,
'\n'.repeat((options.count + 1) - lineDifference)
),
})
}
}
Expand Down
15 changes: 15 additions & 0 deletions tests/src/rules/newline-after-import.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
invalid: [
{
code: `import foo from 'foo';\nexport default function() {};`,
output: `import foo from 'foo';\n\nexport default function() {};`,
errors: [ {
line: 1,
column: 1,
Expand All @@ -175,6 +176,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `import foo from 'foo';\n\nexport default function() {};`,
output: `import foo from 'foo';\n\n\nexport default function() {};`,
options: [{ 'count': 2 }],
errors: [ {
line: 1,
Expand All @@ -185,6 +187,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `import foo from 'foo';\nexport default function() {};`,
output: `import foo from 'foo';\n\nexport default function() {};`,
options: [{ 'count': 1 }],
errors: [ {
line: 1,
Expand All @@ -195,6 +198,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `var foo = require('foo-module');\nvar something = 123;`,
output: `var foo = require('foo-module');\n\nvar something = 123;`,
errors: [ {
line: 1,
column: 1,
Expand All @@ -204,6 +208,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `import foo from 'foo';\nvar a = 123;\n\nimport { bar } from './bar-lib';\nvar b=456;`,
output: `import foo from 'foo';\n\nvar a = 123;\n\nimport { bar } from './bar-lib';\n\nvar b=456;`,
errors: [
{
line: 1,
Expand All @@ -219,6 +224,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `var foo = require('foo-module');\nvar a = 123;\n\nvar bar = require('bar-lib');\nvar b=456;`,
output: `var foo = require('foo-module');\n\nvar a = 123;\n\nvar bar = require('bar-lib');\n\nvar b=456;`,
errors: [
{
line: 1,
Expand All @@ -234,6 +240,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `var foo = require('foo-module');\nvar a = 123;\n\nrequire('bar-lib');\nvar b=456;`,
output: `var foo = require('foo-module');\n\nvar a = 123;\n\nrequire('bar-lib');\n\nvar b=456;`,
errors: [
{
line: 1,
Expand All @@ -249,6 +256,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `var path = require('path');\nvar foo = require('foo');\nvar bar = 42;`,
output: `var path = require('path');\nvar foo = require('foo');\n\nvar bar = 42;`,
errors: [ {
line: 2,
column: 1,
Expand All @@ -257,6 +265,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `var assign = Object.assign || require('object-assign');\nvar foo = require('foo');\nvar bar = 42;`,
output: `var assign = Object.assign || require('object-assign');\nvar foo = require('foo');\n\nvar bar = 42;`,
errors: [ {
line: 2,
column: 1,
Expand All @@ -265,6 +274,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `require('a');\nfoo(require('b'), require('c'), require('d'));\nrequire('d');\nvar foo = 'bar';`,
output: `require('a');\nfoo(require('b'), require('c'), require('d'));\nrequire('d');\n\nvar foo = 'bar';`,
errors: [
{
line: 3,
Expand All @@ -275,6 +285,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `require('a');\nfoo(\nrequire('b'),\nrequire('c'),\nrequire('d')\n);\nvar foo = 'bar';`,
output: `require('a');\nfoo(\nrequire('b'),\nrequire('c'),\nrequire('d')\n);\n\nvar foo = 'bar';`,
errors: [
{
line: 6,
Expand All @@ -285,6 +296,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `import path from 'path';\nimport foo from 'foo';\nvar bar = 42;`,
output: `import path from 'path';\nimport foo from 'foo';\n\nvar bar = 42;`,
errors: [ {
line: 2,
column: 1,
Expand All @@ -294,6 +306,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `import path from 'path';import foo from 'foo';var bar = 42;`,
output: `import path from 'path';import foo from 'foo';\n\nvar bar = 42;`,
errors: [ {
line: 1,
column: 25,
Expand All @@ -303,6 +316,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `import foo from 'foo';\n@SomeDecorator(foo)\nclass Foo {}`,
output: `import foo from 'foo';\n\n@SomeDecorator(foo)\nclass Foo {}`,
errors: [ {
line: 1,
column: 1,
Expand All @@ -313,6 +327,7 @@ ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
},
{
code: `var foo = require('foo');\n@SomeDecorator(foo)\nclass Foo {}`,
output: `var foo = require('foo');\n\n@SomeDecorator(foo)\nclass Foo {}`,
errors: [ {
line: 1,
column: 1,
Expand Down