11const merge = require ( 'deepmerge' ) ;
22
3- module . exports = ( neutrino , options = { } ) => {
3+ module . exports = ( options = { } ) => {
44 if ( ! options . use ) {
55 throw new Error (
66 'The linting middleware requires a base middleware to extend'
@@ -13,126 +13,132 @@ module.exports = (neutrino, options = {}) => {
1313 ) ;
1414 }
1515
16- const [ airbnb , overrides ] = options . use ;
16+ return neutrino => {
17+ const [ airbnb , overrides ] = options . use ;
1718
18- neutrino . use ( airbnb , {
19- eslint : {
20- emitWarning : process . env . NODE_ENV === 'development' ,
21- baseConfig : {
22- extends : [ 'prettier' ] ,
23- } ,
24- plugins : [ 'prettier' ] ,
25- rules : {
26- 'import/no-extraneous-dependencies' : 'off' ,
27- // Specify the maximum length of a line in your program
28- 'max-len' : [
29- 'error' ,
30- 80 ,
31- 2 ,
32- {
33- ignoreUrls : true ,
34- ignoreComments : false ,
35- ignoreStrings : true ,
36- ignoreTemplateLiterals : true ,
19+ neutrino . use (
20+ airbnb ( {
21+ eslint : {
22+ emitWarning : process . env . NODE_ENV === 'development' ,
23+ baseConfig : {
24+ extends : [ 'prettier' ] ,
3725 } ,
38- ] ,
39- // Allow using class methods with static/non-instance functionality
40- // React lifecycle methods commonly do not use an instance context for
41- // anything
42- 'class-methods-use-this' : 'off' ,
43- // Allow console during development, otherwise throw an error
44- 'no-console' : process . env . NODE_ENV === 'development' ? 'off' : 'error' ,
45- // Allow extra parentheses since multiline JSX being wrapped in parens
46- // is considered idiomatic
47- 'no-extra-parens' : 'off' ,
48- // Our frontend strives to adopt functional programming practices,
49- // so we prefer const over let
50- 'prefer-const' : 'error' ,
51- 'prettier/prettier' : [
52- 'error' ,
53- {
54- singleQuote : true ,
55- trailingComma : 'es5' ,
56- bracketSpacing : true ,
57- jsxBracketSameLine : true ,
58- tabWidth : 2 ,
59- semi : true ,
26+ plugins : [ 'prettier' ] ,
27+ rules : {
28+ 'import/no-extraneous-dependencies' : 'off' ,
29+ // Specify the maximum length of a line in your program
30+ 'max-len' : [
31+ 'error' ,
32+ 80 ,
33+ 2 ,
34+ {
35+ ignoreUrls : true ,
36+ ignoreComments : false ,
37+ ignoreStrings : true ,
38+ ignoreTemplateLiterals : true ,
39+ } ,
40+ ] ,
41+ // Allow using class methods with static/non-instance functionality
42+ // React lifecycle methods commonly do not use
43+ // aninstance context for anything
44+ 'class-methods-use-this' : 'off' ,
45+ // Allow console during development, otherwise throw an error
46+ 'no-console' :
47+ process . env . NODE_ENV === 'development' ? 'off' : 'error' ,
48+ // Allow extra parentheses since multiline
49+ // JSX being wrapped in parens is considered
50+ // idiomatic
51+ 'no-extra-parens' : 'off' ,
52+ // Our frontend strives to adopt functional programming practices,
53+ // so we prefer const over let
54+ 'prefer-const' : 'error' ,
55+ 'prettier/prettier' : [
56+ 'error' ,
57+ {
58+ singleQuote : true ,
59+ trailingComma : 'es5' ,
60+ bracketSpacing : true ,
61+ jsxBracketSameLine : true ,
62+ tabWidth : 2 ,
63+ semi : true ,
64+ } ,
65+ ] ,
66+ 'padding-line-between-statements' : [
67+ 'error' ,
68+ {
69+ blankLine : 'always' ,
70+ prev : [ 'const' , 'let' , 'var' ] ,
71+ next : '*' ,
72+ } ,
73+ {
74+ blankLine : 'never' ,
75+ prev : [ 'const' , 'let' , 'var' ] ,
76+ next : [ 'const' , 'let' , 'var' ] ,
77+ } ,
78+ {
79+ blankLine : 'always' ,
80+ prev : [ 'cjs-import' ] ,
81+ next : '*' ,
82+ } ,
83+ {
84+ blankLine : 'always' ,
85+ prev : [ 'import' ] ,
86+ next : '*' ,
87+ } ,
88+ {
89+ blankLine : 'always' ,
90+ prev : '*' ,
91+ next : [ 'cjs-export' ] ,
92+ } ,
93+ {
94+ blankLine : 'always' ,
95+ prev : '*' ,
96+ next : [ 'export' ] ,
97+ } ,
98+ {
99+ blankLine : 'never' ,
100+ prev : [ 'import' ] ,
101+ next : [ 'import' ] ,
102+ } ,
103+ {
104+ blankLine : 'never' ,
105+ prev : [ 'cjs-import' ] ,
106+ next : [ 'cjs-import' ] ,
107+ } ,
108+ {
109+ blankLine : 'any' ,
110+ prev : [ 'export' ] ,
111+ next : [ 'export' ] ,
112+ } ,
113+ {
114+ blankLine : 'any' ,
115+ prev : [ 'cjs-export' ] ,
116+ next : [ 'cjs-export' ] ,
117+ } ,
118+ { blankLine : 'always' , prev : 'multiline-block-like' , next : '*' } ,
119+ {
120+ blankLine : 'always' ,
121+ prev : '*' ,
122+ next : [ 'if' , 'do' , 'for' , 'switch' , 'try' , 'while' ] ,
123+ } ,
124+ { blankLine : 'always' , prev : '*' , next : 'return' } ,
125+ ] ,
126+ 'consistent-return' : 'off' ,
127+ 'no-unused-expressions' : 'off' ,
128+ 'no-shadow' : 'off' ,
129+ 'no-return-assign' : 'off' ,
130+ 'babel/new-cap' : 'off' ,
131+ 'no-mixed-operators' : 'off' ,
60132 } ,
61- ] ,
62- 'padding-line-between-statements' : [
63- 'error' ,
64- {
65- blankLine : 'always' ,
66- prev : [ 'const' , 'let' , 'var' ] ,
67- next : '*' ,
68- } ,
69- {
70- blankLine : 'never' ,
71- prev : [ 'const' , 'let' , 'var' ] ,
72- next : [ 'const' , 'let' , 'var' ] ,
73- } ,
74- {
75- blankLine : 'always' ,
76- prev : [ 'cjs-import' ] ,
77- next : '*' ,
78- } ,
79- {
80- blankLine : 'always' ,
81- prev : [ 'import' ] ,
82- next : '*' ,
83- } ,
84- {
85- blankLine : 'always' ,
86- prev : '*' ,
87- next : [ 'cjs-export' ] ,
88- } ,
89- {
90- blankLine : 'always' ,
91- prev : '*' ,
92- next : [ 'export' ] ,
93- } ,
94- {
95- blankLine : 'never' ,
96- prev : [ 'import' ] ,
97- next : [ 'import' ] ,
98- } ,
99- {
100- blankLine : 'never' ,
101- prev : [ 'cjs-import' ] ,
102- next : [ 'cjs-import' ] ,
103- } ,
104- {
105- blankLine : 'any' ,
106- prev : [ 'export' ] ,
107- next : [ 'export' ] ,
108- } ,
109- {
110- blankLine : 'any' ,
111- prev : [ 'cjs-export' ] ,
112- next : [ 'cjs-export' ] ,
113- } ,
114- { blankLine : 'always' , prev : 'multiline-block-like' , next : '*' } ,
115- {
116- blankLine : 'always' ,
117- prev : '*' ,
118- next : [ 'if' , 'do' , 'for' , 'switch' , 'try' , 'while' ] ,
119- } ,
120- { blankLine : 'always' , prev : '*' , next : 'return' } ,
121- ] ,
122- 'consistent-return' : 'off' ,
123- 'no-unused-expressions' : 'off' ,
124- 'no-shadow' : 'off' ,
125- 'no-return-assign' : 'off' ,
126- 'babel/new-cap' : 'off' ,
127- 'no-mixed-operators' : 'off' ,
128- } ,
129- } ,
130- } ) ;
133+ } ,
134+ } )
135+ ) ;
131136
132- if ( overrides ) {
133- neutrino . config . module
134- . rule ( 'lint' )
135- . use ( 'eslint' )
136- . tap ( opts => merge ( opts , overrides ) ) ;
137- }
137+ if ( overrides ) {
138+ neutrino . config . module
139+ . rule ( 'lint' )
140+ . use ( 'eslint' )
141+ . tap ( opts => merge ( opts , overrides ) ) ;
142+ }
143+ } ;
138144} ;
0 commit comments