@@ -29,58 +29,68 @@ module.exports = {
2929 } ,
3030
3131 create ( context ) {
32- const options = context . options [ 0 ]
33- const optSpaces = options !== 'never'
34- const template = context . parserServices . getTemplateBodyTokenStore && context . parserServices . getTemplateBodyTokenStore ( )
35-
36- // ----------------------------------------------------------------------
37- // Helpers
38- // ----------------------------------------------------------------------
39-
40- function checkTokens ( leftToken , rightToken ) {
41- if ( leftToken . loc . end . line === rightToken . loc . start . line ) {
42- const spaces = rightToken . loc . start . column - leftToken . loc . end . column
43- const noSpacesFound = spaces === 0
44-
45- if ( optSpaces === noSpacesFound ) {
46- context . report ( {
47- node : rightToken ,
48- loc : {
49- start : leftToken . loc . end ,
50- end : rightToken . loc . start
51- } ,
52- message : 'Found {{spaces}} whitespaces, {{type}} expected.' ,
53- data : {
54- spaces : spaces === 0 ? 'none' : spaces ,
55- type : optSpaces ? '1' : 'none'
56- } ,
57- fix : ( fixer ) => fixer . replaceTextRange ( [ leftToken . range [ 1 ] , rightToken . range [ 0 ] ] , optSpaces ? ' ' : '' )
58- } )
59- }
60- }
61- }
32+ const options = context . options [ 0 ] || 'always'
33+ const template =
34+ context . parserServices . getTemplateBodyTokenStore &&
35+ context . parserServices . getTemplateBodyTokenStore ( )
6236
6337 // ----------------------------------------------------------------------
6438 // Public
6539 // ----------------------------------------------------------------------
6640
6741 return utils . defineTemplateBodyVisitor ( context , {
6842 'VExpressionContainer[expression!=null]' ( node ) {
69- const tokens = template . getTokens ( node , {
70- includeComments : true ,
71- filter : token => token . type !== 'HTMLWhitespace' // When there is only whitespace between ignore it
72- } )
43+ const openBrace = template . getFirstToken ( node )
44+ const closeBrace = template . getLastToken ( node )
45+
46+ if (
47+ ! openBrace ||
48+ ! closeBrace ||
49+ openBrace . type !== 'VExpressionStart' ||
50+ closeBrace . type !== 'VExpressionEnd'
51+ ) {
52+ return
53+ }
7354
74- const startToken = tokens . shift ( )
75- if ( ! startToken || startToken . type !== 'VExpressionStart' ) return
76- const endToken = tokens . pop ( )
77- if ( ! endToken || endToken . type !== 'VExpressionEnd' ) return
55+ const firstToken = template . getTokenAfter ( openBrace , { includeComments : true } )
56+ const lastToken = template . getTokenBefore ( closeBrace , { includeComments : true } )
7857
79- if ( tokens . length > 0 ) {
80- checkTokens ( startToken , tokens [ 0 ] )
81- checkTokens ( tokens [ tokens . length - 1 ] , endToken )
58+ if ( options === 'always' ) {
59+ if ( openBrace . range [ 1 ] === firstToken . range [ 0 ] ) {
60+ context . report ( {
61+ node : openBrace ,
62+ message : "Expected 1 space after '{{', but not found." ,
63+ fix : ( fixer ) => fixer . insertTextAfter ( openBrace , ' ' )
64+ } )
65+ }
66+ if ( closeBrace . range [ 0 ] === lastToken . range [ 1 ] ) {
67+ context . report ( {
68+ node : closeBrace ,
69+ message : "Expected 1 space before '}}', but not found." ,
70+ fix : ( fixer ) => fixer . insertTextBefore ( closeBrace , ' ' )
71+ } )
72+ }
8273 } else {
83- checkTokens ( startToken , endToken )
74+ if ( openBrace . range [ 1 ] !== firstToken . range [ 0 ] ) {
75+ context . report ( {
76+ loc : {
77+ start : openBrace . loc . start ,
78+ end : firstToken . loc . start
79+ } ,
80+ message : "Expected no space after '{{', but found." ,
81+ fix : ( fixer ) => fixer . removeRange ( [ openBrace . range [ 1 ] , firstToken . range [ 0 ] ] )
82+ } )
83+ }
84+ if ( closeBrace . range [ 0 ] !== lastToken . range [ 1 ] ) {
85+ context . report ( {
86+ loc : {
87+ start : lastToken . loc . end ,
88+ end : closeBrace . loc . end
89+ } ,
90+ message : "Expected no space before '}}', but found." ,
91+ fix : ( fixer ) => fixer . removeRange ( [ lastToken . range [ 1 ] , closeBrace . range [ 0 ] ] )
92+ } )
93+ }
8494 }
8595 }
8696 } )
0 commit comments