@@ -20,10 +20,50 @@ module.exports = {
20
20
schema : [ {
21
21
enum : [ 'always' , 'never' , 'multiline' , 'multiline-multiprop' ]
22
22
} ]
23
+
23
24
} ,
24
25
25
26
create : function ( context ) {
26
27
var configuration = context . options [ 0 ] ;
28
+ var extraColumnStart = 0 ;
29
+ var indentType = 'space' ;
30
+ var indentSize = 2 ;
31
+ var sourceCode = context . getSourceCode ( ) ;
32
+
33
+ if ( context . options . length > 1 ) {
34
+ if ( context . options [ 1 ] === 'tab' ) {
35
+ indentSize = 1 ;
36
+ indentType = 'tab' ;
37
+ } else if ( typeof context . options [ 1 ] === 'number' ) {
38
+ indentSize = context . options [ 1 ] ;
39
+ indentType = 'space' ;
40
+ }
41
+ }
42
+
43
+ function getNodeIndent ( node , byLastLine , excludeCommas ) {
44
+ byLastLine = byLastLine || false ;
45
+ excludeCommas = excludeCommas || false ;
46
+
47
+ var src = sourceCode . getText ( node , node . loc . start . column + extraColumnStart ) ;
48
+ var lines = src . split ( '\n' ) ;
49
+ if ( byLastLine ) {
50
+ src = lines [ lines . length - 1 ] ;
51
+ } else {
52
+ src = lines [ 0 ] ;
53
+ }
54
+
55
+ var skip = excludeCommas ? ',' : '' ;
56
+
57
+ var regExp ;
58
+ if ( indentType === 'space' ) {
59
+ regExp = new RegExp ( '^[ ' + skip + ']+' ) ;
60
+ } else {
61
+ regExp = new RegExp ( '^[\t' + skip + ']+' ) ;
62
+ }
63
+
64
+ var indent = regExp . exec ( src ) ;
65
+ return indent ? indent [ 0 ] . length : 0 ;
66
+ }
27
67
28
68
function isMultilineJSX ( jsxNode ) {
29
69
return jsxNode . loc . start . line < jsxNode . loc . end . line ;
@@ -42,7 +82,10 @@ module.exports = {
42
82
node : decl ,
43
83
message : 'Property should be placed on a new line' ,
44
84
fix : function ( fixer ) {
45
- return fixer . insertTextAfter ( node . name , '\n' ) ;
85
+ var nodeIndent = getNodeIndent ( node , false , false ) ;
86
+ var neededIndent = nodeIndent + indentSize ;
87
+ var insert = '\n' + Array ( neededIndent + 1 ) . join ( indentType === 'space' ? ' ' : '\t' ) ;
88
+ return fixer . replaceTextRange ( [ node . name . end , decl . start ] , insert ) ;
46
89
}
47
90
} ) ;
48
91
}
0 commit comments