diff --git a/lib/rules/block-closing-brace-space-before/__tests__/index.js b/lib/rules/block-closing-brace-space-before/__tests__/index.js index 65a2a46c52..d7356ed034 100644 --- a/lib/rules/block-closing-brace-space-before/__tests__/index.js +++ b/lib/rules/block-closing-brace-space-before/__tests__/index.js @@ -67,9 +67,18 @@ testRule(rule, { { code: "a { color: pink;} b { color: red;}", fixed: "a { color: pink; } b { color: red; }", - message: messages.expectedBefore(), - line: 1, - column: 16 + warnings: [ + { + message: messages.expectedBefore(), + line: 1, + column: 16 + }, + { + message: messages.expectedBefore(), + line: 1, + column: 33 + } + ] }, { code: "a { color: pink;/*comment*/}", @@ -152,9 +161,18 @@ testRule(rule, { { code: "a { color: pink; } b { color: red; }", fixed: "a { color: pink;} b { color: red;}", - message: messages.rejectedBefore(), - line: 1, - column: 17 + warnings: [ + { + message: messages.rejectedBefore(), + line: 1, + column: 17 + }, + { + message: messages.rejectedBefore(), + line: 1, + column: 35 + } + ] }, { code: "a { color: pink; /*comment*/ }", diff --git a/lib/rules/block-opening-brace-newline-before/__tests__/index.js b/lib/rules/block-opening-brace-newline-before/__tests__/index.js index c204ed99d7..3ca203745e 100644 --- a/lib/rules/block-opening-brace-newline-before/__tests__/index.js +++ b/lib/rules/block-opening-brace-newline-before/__tests__/index.js @@ -159,9 +159,18 @@ testRule(rule, { { code: "@media print /* foo */ { a /* foo */ { color: pink; } }", fixed: "@media print /* foo */\n { a /* foo */\n { color: pink; } }", - message: messages.expectedBefore(), - line: 1, - column: 37 + warnings: [ + { + message: messages.expectedBefore(), + line: 1, + column: 37 + }, + { + message: messages.expectedBefore(), + line: 1, + column: 23 + } + ] } ] }); diff --git a/lib/rules/function-parentheses-newline-inside/__tests__/index.js b/lib/rules/function-parentheses-newline-inside/__tests__/index.js index 3dd26c1119..781b712ba4 100644 --- a/lib/rules/function-parentheses-newline-inside/__tests__/index.js +++ b/lib/rules/function-parentheses-newline-inside/__tests__/index.js @@ -128,9 +128,18 @@ testRule(rule, { code: "a { transform: translate( /*c1*/ /*c2*/ 1,1 /*c3*/ /*c4*/ ); }", fixed: "a { transform: translate( /*c1*/ /*c2*/\n 1,1 /*c3*/ /*c4*/\n ); }", - message: messages.expectedOpening, - line: 1, - column: 26 + warnings: [ + { + message: messages.expectedOpening, + line: 1, + column: 26 + }, + { + message: messages.expectedClosing, + line: 1, + column: 58 + } + ] } ] }); @@ -342,30 +351,66 @@ testRule(rule, { { code: "a { transform: translate( /*c1*/ /*c2*/ 1,\n1 /*c3*/ /*c4*/ ); }", fixed: "a { transform: translate(/*c1*//*c2*/1,\n1/*c3*//*c4*/); }", - message: messages.rejectedOpeningMultiLine, - line: 1, - column: 26 + warnings: [ + { + message: messages.rejectedOpeningMultiLine, + line: 1, + column: 26 + }, + { + message: messages.rejectedClosingMultiLine, + line: 2, + column: 16 + } + ] }, { code: "a { transform: translate( /*c1*//*c2*/1,\n1/*c3*//*c4*/ ); }", fixed: "a { transform: translate(/*c1*//*c2*/1,\n1/*c3*//*c4*/); }", - message: messages.rejectedOpeningMultiLine, - line: 1, - column: 26 + warnings: [ + { + message: messages.rejectedOpeningMultiLine, + line: 1, + column: 26 + }, + { + message: messages.rejectedClosingMultiLine, + line: 2, + column: 14 + } + ] }, { code: "a { transform: translate(/*c1*//*c2*/ 1,\n1 /*c3*//*c4*/); }", fixed: "a { transform: translate(/*c1*//*c2*/1,\n1/*c3*//*c4*/); }", - message: messages.rejectedOpeningMultiLine, - line: 1, - column: 26 + warnings: [ + { + message: messages.rejectedOpeningMultiLine, + line: 1, + column: 26 + }, + { + message: messages.rejectedClosingMultiLine, + line: 2, + column: 14 + } + ] }, { code: "a { transform: translate(/*c1*/ /*c2*/1,\n1/*c3*/ /*c4*/); }", fixed: "a { transform: translate(/*c1*//*c2*/1,\n1/*c3*//*c4*/); }", - message: messages.rejectedOpeningMultiLine, - line: 1, - column: 26 + warnings: [ + { + message: messages.rejectedOpeningMultiLine, + line: 1, + column: 26 + }, + { + message: messages.rejectedClosingMultiLine, + line: 2, + column: 14 + } + ] } ] }); diff --git a/lib/rules/media-query-list-comma-newline-after/__tests__/index.js b/lib/rules/media-query-list-comma-newline-after/__tests__/index.js index 91a847bbf6..4d576c36e5 100644 --- a/lib/rules/media-query-list-comma-newline-after/__tests__/index.js +++ b/lib/rules/media-query-list-comma-newline-after/__tests__/index.js @@ -183,11 +183,25 @@ testRule(rule, { column: 26 }, { - code: "@media " + "tv,".repeat(50) + "print {}", - fixed: "@media " + "tv,\n".repeat(50) + "print {}", - message: messages.expectedAfter(), - line: 1, - column: 10 + code: "@media tv,tv,tv,print {}", + fixed: "@media tv,\ntv,\ntv,\nprint {}", + warnings: [ + { + message: messages.expectedAfter(), + line: 1, + column: 10 + }, + { + message: messages.expectedAfter(), + line: 1, + column: 13 + }, + { + message: messages.expectedAfter(), + line: 1, + column: 16 + } + ] } ] }); @@ -398,11 +412,25 @@ testRule(rule, { column: 26 }, { - code: "@media " + "tv,\n".repeat(50) + "print {\n}", - fixed: "@media " + "tv,".repeat(50) + "print {\n}", - message: messages.rejectedAfterMultiLine(), - line: 1, - column: 10 + code: "@media tv,\ntv,\ntv,\nprint {\n}", + fixed: "@media tv,tv,tv,print {\n}", + warnings: [ + { + message: messages.rejectedAfterMultiLine(), + line: 1, + column: 10 + }, + { + message: messages.rejectedAfterMultiLine(), + line: 2, + column: 3 + }, + { + message: messages.rejectedAfterMultiLine(), + line: 3, + column: 3 + } + ] } ] }); diff --git a/lib/rules/rule-empty-line-before/__tests__/index.js b/lib/rules/rule-empty-line-before/__tests__/index.js index 1f97eb3c8e..c03600ae12 100644 --- a/lib/rules/rule-empty-line-before/__tests__/index.js +++ b/lib/rules/rule-empty-line-before/__tests__/index.js @@ -66,7 +66,18 @@ testRule(rule, { code: "@media { b {}\n\n/* comment here*/\na {} }", fixed: "@media {\n\n b {}\n\n/* comment here*/\n\na {} }", description: "nested", - message: messages.expected + warnings: [ + { + message: messages.expected, + line: 1, + column: 10 + }, + { + message: messages.expected, + line: 4, + column: 1 + } + ] } ] }); @@ -103,7 +114,18 @@ testRule(rule, { { code: "@media { b {} a {} }", fixed: "@media {\n\n b {}\n\n a {} }", - message: messages.expected + warnings: [ + { + message: messages.expected, + line: 1, + column: 10 + }, + { + message: messages.expected, + line: 1, + column: 15 + } + ] } ] }); diff --git a/lib/rules/selector-attribute-brackets-space-inside/__tests__/index.js b/lib/rules/selector-attribute-brackets-space-inside/__tests__/index.js index 2b7876413b..343e07cfe9 100644 --- a/lib/rules/selector-attribute-brackets-space-inside/__tests__/index.js +++ b/lib/rules/selector-attribute-brackets-space-inside/__tests__/index.js @@ -420,23 +420,60 @@ testRule(rule, { { code: "img[alt~=person][src*=lorem] { }", fixed: "img[ alt~=person ][ src*=lorem ] { }", - message: messages.expectedOpening, - line: 1, - column: 5 + warnings: [ + { + message: messages.expectedOpening, + line: 1, + column: 5 + }, + { + message: messages.expectedClosing, + line: 1, + column: 15 + }, + { + message: messages.expectedOpening, + line: 1, + column: 18 + }, + { + message: messages.expectedClosing, + line: 1, + column: 27 + } + ] }, { code: "[/**/foo=bar i] { }", fixed: "[ /**/foo=bar i ] { }", - message: messages.expectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.expectedOpening, + line: 1, + column: 2 + }, + { + message: messages.expectedClosing, + line: 1, + column: 14 + } + ] }, { code: "[foo=bar i /**/] { }", fixed: "[ foo=bar i /**/ ] { }", - message: messages.expectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.expectedOpening, + line: 1, + column: 2 + }, + { + message: messages.expectedClosing, + line: 1, + column: 15 + } + ] }, { code: "[foo=bar i/**/] { }", @@ -444,23 +481,50 @@ testRule(rule, { // attributeNode.toString() = "[ foo=bar i]" // attributeNode.raws.insensitive: = "true/**/" - message: messages.expectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.expectedOpening, + line: 1, + column: 2 + }, + { + message: messages.expectedClosing, + line: 1, + column: 10 + } + ] }, { code: "[foo=bar/**/] { }", fixed: "[ foo=bar/**/ ] { }", - message: messages.expectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.expectedOpening, + line: 1, + column: 2 + }, + { + message: messages.expectedClosing, + line: 1, + column: 12 + } + ] }, { code: "[foo/**/] { }", fixed: "[ foo/**/ ] { }", - message: messages.expectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.expectedOpening, + line: 1, + column: 2 + }, + { + message: messages.expectedClosing, + line: 1, + column: 8 + } + ] } ] }); @@ -863,44 +927,108 @@ testRule(rule, { { code: "img[ alt~=person ][ src*=lorem ] { }", fixed: "img[alt~=person][src*=lorem] { }", - message: messages.rejectedOpening, - line: 1, - column: 5 + warnings: [ + { + message: messages.rejectedOpening, + line: 1, + column: 5 + }, + { + message: messages.rejectedClosing, + line: 1, + column: 17 + }, + { + message: messages.rejectedOpening, + line: 1, + column: 20 + }, + { + message: messages.rejectedClosing, + line: 1, + column: 31 + } + ] }, { code: "[ /**/foo=bar i ] { }", fixed: "[/**/foo=bar i] { }", - message: messages.rejectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.rejectedOpening, + line: 1, + column: 2 + }, + { + message: messages.rejectedClosing, + line: 1, + column: 16 + } + ] }, { code: "[ foo=bar i /**/ ] { }", fixed: "[foo=bar i /**/] { }", - message: messages.rejectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.rejectedOpening, + line: 1, + column: 2 + }, + { + message: messages.rejectedClosing, + line: 1, + column: 17 + } + ] }, { code: "[ foo=bar i/**/ ] { }", fixed: "[foo=bar i/**/] { }", - message: messages.rejectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.rejectedOpening, + line: 1, + column: 2 + }, + { + message: messages.rejectedClosing, + line: 1, + column: 16 + } + ] }, { code: "[ foo=bar/**/ ] { }", fixed: "[foo=bar/**/] { }", - message: messages.rejectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.rejectedOpening, + line: 1, + column: 2 + }, + { + message: messages.rejectedClosing, + line: 1, + column: 14 + } + ] }, { code: "[ foo/**/ ] { }", fixed: "[foo/**/] { }", - message: messages.rejectedOpening, - line: 1, - column: 2 + warnings: [ + { + message: messages.rejectedOpening, + line: 1, + column: 2 + }, + { + message: messages.rejectedClosing, + line: 1, + column: 10 + } + ] } ] }); diff --git a/lib/rules/selector-attribute-operator-space-after/__tests__/index.js b/lib/rules/selector-attribute-operator-space-after/__tests__/index.js index 39decd3d47..a3c77f54ea 100644 --- a/lib/rules/selector-attribute-operator-space-after/__tests__/index.js +++ b/lib/rules/selector-attribute-operator-space-after/__tests__/index.js @@ -809,9 +809,18 @@ testRule(rule, { { code: "ul li[aria-hidden=false] + li[aria-hidden=false] a { }", fixed: "ul li[aria-hidden= false] + li[aria-hidden= false] a { }", - message: messages.expectedAfter("="), - line: 1, - column: 18 + warnings: [ + { + message: messages.expectedAfter("="), + line: 1, + column: 18 + }, + { + message: messages.expectedAfter("="), + line: 1, + column: 42 + } + ] }, { code: '[target=/**/"_blank"] { }', @@ -1620,9 +1629,18 @@ testRule(rule, { { code: "ul li[aria-hidden = false] + li[aria-hidden = false] a { }", fixed: "ul li[aria-hidden =false] + li[aria-hidden =false] a { }", - message: messages.rejectedAfter("="), - line: 1, - column: 19 + warnings: [ + { + message: messages.rejectedAfter("="), + line: 1, + column: 19 + }, + { + message: messages.rejectedAfter("="), + line: 1, + column: 45 + } + ] }, { code: '[target= /**/"_blank"] { }', diff --git a/lib/rules/selector-attribute-operator-space-before/__tests__/index.js b/lib/rules/selector-attribute-operator-space-before/__tests__/index.js index d42d709d97..dce7f9ada8 100644 --- a/lib/rules/selector-attribute-operator-space-before/__tests__/index.js +++ b/lib/rules/selector-attribute-operator-space-before/__tests__/index.js @@ -809,9 +809,18 @@ testRule(rule, { { code: "ul li[aria-hidden= false] + li[aria-hidden= false] a { }", fixed: "ul li[aria-hidden = false] + li[aria-hidden = false] a { }", - message: messages.expectedBefore("="), - line: 1, - column: 18 + warnings: [ + { + message: messages.expectedBefore("="), + line: 1, + column: 18 + }, + { + message: messages.expectedBefore("="), + line: 1, + column: 43 + } + ] }, { code: '[target/**/="_blank"] { }', @@ -1620,9 +1629,18 @@ testRule(rule, { { code: "ul li[aria-hidden = false] + li[aria-hidden = false] a { }", fixed: "ul li[aria-hidden= false] + li[aria-hidden= false] a { }", - message: messages.rejectedBefore("="), - line: 1, - column: 19 + warnings: [ + { + message: messages.rejectedBefore("="), + line: 1, + column: 19 + }, + { + message: messages.rejectedBefore("="), + line: 1, + column: 45 + } + ] }, { code: '[target/**/ ="_blank"] { }', diff --git a/lib/rules/selector-combinator-space-after/__tests__/index.js b/lib/rules/selector-combinator-space-after/__tests__/index.js index 19919a457f..bfaa6b4fc2 100644 --- a/lib/rules/selector-combinator-space-after/__tests__/index.js +++ b/lib/rules/selector-combinator-space-after/__tests__/index.js @@ -227,9 +227,18 @@ testRule(rule, { { code: "a >a >a {}", fixed: "a > a > a {}", - message: messages.expectedAfter(">"), - line: 1, - column: 3 + warnings: [ + { + message: messages.expectedAfter(">"), + line: 1, + column: 3 + }, + { + message: messages.expectedAfter(">"), + line: 1, + column: 6 + } + ] }, { code: ".a { &>.b {} }", @@ -259,9 +268,18 @@ testRule(rule, { code: "a/*comment*/>/*comment*/a, b/*comment*/>/*comment*/b {}", fixed: "a/*comment*/> /*comment*/a, b/*comment*/> /*comment*/b {}", description: "comment", - message: messages.expectedAfter(">"), - line: 1, - column: 13 + warnings: [ + { + message: messages.expectedAfter(">"), + line: 1, + column: 13 + }, + { + message: messages.expectedAfter(">"), + line: 1, + column: 40 + } + ] } ] }); @@ -483,9 +501,18 @@ testRule(rule, { code: "a/*comment*/ > /*comment*/a, b/*comment*/ > /*comment*/b {}", fixed: "a/*comment*/ >/*comment*/a, b/*comment*/ >/*comment*/b {}", description: "comment", - message: messages.rejectedAfter(">"), - line: 1, - column: 14 + warnings: [ + { + message: messages.rejectedAfter(">"), + line: 1, + column: 14 + }, + { + message: messages.rejectedAfter(">"), + line: 1, + column: 43 + } + ] } ] }); @@ -539,9 +566,18 @@ testRule(rule, { code: "a { >/*comment*/a, >/*comment*/.b{} }", fixed: "a { > /*comment*/a, > /*comment*/.b{} }", description: "scss nesting, comment and comma", - message: messages.expectedAfter(">"), - line: 1, - column: 5 + warnings: [ + { + message: messages.expectedAfter(">"), + line: 1, + column: 5 + }, + { + message: messages.expectedAfter(">"), + line: 1, + column: 20 + } + ] } ] }); @@ -572,9 +608,18 @@ testRule(rule, { code: "a { > /*comment*/a, > /*comment*/.b {} }", fixed: "a { >/*comment*/a, >/*comment*/.b {} }", description: "scss nesting, comment and comma", - message: messages.rejectedAfter(">"), - line: 1, - column: 5 + warnings: [ + { + message: messages.rejectedAfter(">"), + line: 1, + column: 5 + }, + { + message: messages.rejectedAfter(">"), + line: 1, + column: 21 + } + ] } ] }); diff --git a/lib/rules/selector-list-comma-newline-after/__tests__/index.js b/lib/rules/selector-list-comma-newline-after/__tests__/index.js index 87f533f83c..103d980937 100644 --- a/lib/rules/selector-list-comma-newline-after/__tests__/index.js +++ b/lib/rules/selector-list-comma-newline-after/__tests__/index.js @@ -192,9 +192,11 @@ testRule(rule, { code: "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z {\n}", fixed: "a,\nb,\nc,\nd,\ne,\nf,\ng,\nh,\ni,\nj,\nk,\nl,\nm,\nn,\no,\np,\nq,\nr,\ns,\nt,\nu,\nv,\nw,\nx,\ny,\nz {\n}", - message: messages.expectedAfter(), - line: 1, - column: 2 + warnings: new Array(25).fill(0).map((_, i) => ({ + message: messages.expectedAfter(), + line: 1, + column: 2 * (i + 1) + })) } ] }); @@ -317,17 +319,28 @@ testRule(rule, { { code: "a,\n/*comment*/\nb ,\nc {\n}", fixed: "a,\n/*comment*/b ,c {\n}", - message: messages.rejectedAfterMultiLine(), - line: 1, - column: 2 + warnings: [ + { + message: messages.rejectedAfterMultiLine(), + line: 1, + column: 2 + }, + { + message: messages.rejectedAfterMultiLine(), + line: 3, + column: 3 + } + ] }, { code: "a,\nb,\nc,\nd,\ne,\nf,\ng,\nh,\ni,\nj,\nk,\nl,\nm,\nn,\no,\np,\nq,\nr,\ns,\nt,\nu,\nv,\nw,\nx,\ny,\nz {\n}", fixed: "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z {\n}", - message: messages.rejectedAfterMultiLine(), - line: 1, - column: 2 + warnings: new Array(25).fill(0).map((_, i) => ({ + message: messages.rejectedAfterMultiLine(), + line: 1 + i, + column: 2 + })) } ] }); diff --git a/lib/rules/selector-max-combinators/__tests__/index.js b/lib/rules/selector-max-combinators/__tests__/index.js index b767b93b38..3d6e55cff7 100644 --- a/lib/rules/selector-max-combinators/__tests__/index.js +++ b/lib/rules/selector-max-combinators/__tests__/index.js @@ -178,9 +178,18 @@ testRule(rule, { { code: "foo, bar { & > baz ~ quux + bat {} }", description: "nested selectors: superfluous parent selector", - message: messages.expected("foo > baz ~ quux + bat", 2), - line: 1, - column: 12 + warnings: [ + { + message: messages.expected("foo > baz ~ quux + bat", 2), + line: 1, + column: 12 + }, + { + message: messages.expected("bar > baz ~ quux + bat", 2), + line: 1, + column: 12 + } + ] } ] }); @@ -235,9 +244,18 @@ testRule(rule, { }, { code: "foo + bar { @include test { .aa {} } }", - message: messages.expected("foo + bar", 0), - line: 1, - column: 1 + warnings: [ + { + message: messages.expected("foo + bar", 0), + line: 1, + column: 1 + }, + { + message: messages.expected("foo + bar .aa", 0), + line: 1, + column: 29 + } + ] }, { code: "foo > bar { @include test {} }",