scss_lint 0.42.0 → 0.42.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f22ef7a1e5735cdd001ff93b7fe1dff595dc609
|
4
|
+
data.tar.gz: 1af1a879ec132f70a04fc3b9cc794e0f8dd9a94b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23cb255d2401258655eb94a88c41a7c639ec1d45bc3dae0a413e3fdd68fe2f7bc8d900066673a60c35e4a862c5e3499354328b1547f2a445b0abdbb6acfe8c00
|
7
|
+
data.tar.gz: 0ccd62fd3f715cf3ce291e240e22be5bdbfb4ef5d483cf52c4339ff3baa0296cb625182d48abefbef557e37f2a13e7381cdb6f6e17aab591469cbd7865e9994b
|
@@ -5,9 +5,28 @@ module SCSSLint
|
|
5
5
|
|
6
6
|
STOPPING_CHARACTERS = ['!', "'", '"', nil]
|
7
7
|
|
8
|
+
def visit_extend(node)
|
9
|
+
check_bang(node)
|
10
|
+
end
|
11
|
+
|
8
12
|
def visit_prop(node)
|
9
|
-
|
10
|
-
|
13
|
+
check_bang(node)
|
14
|
+
end
|
15
|
+
|
16
|
+
def visit_variable(node)
|
17
|
+
check_bang(node)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def check_bang(node)
|
23
|
+
range = if node.respond_to?(:value_source_range)
|
24
|
+
node.value_source_range
|
25
|
+
else
|
26
|
+
node.source_range
|
27
|
+
end
|
28
|
+
return unless source_from_range(range).include?('!')
|
29
|
+
return unless check_spacing(range)
|
11
30
|
|
12
31
|
before_qualifier = config['space_before_bang'] ? '' : 'not '
|
13
32
|
after_qualifier = config['space_after_bang'] ? '' : 'not '
|
@@ -16,8 +35,6 @@ module SCSSLint
|
|
16
35
|
"and should #{after_qualifier}be followed by a space")
|
17
36
|
end
|
18
37
|
|
19
|
-
private
|
20
|
-
|
21
38
|
# Start from the back and move towards the front so that any !important or
|
22
39
|
# !default !'s will be found *before* quotation marks. Then we can
|
23
40
|
# stop at quotation marks to protect against linting !'s within strings
|
@@ -40,8 +57,7 @@ module SCSSLint
|
|
40
57
|
(after_actual =~ after_expected).nil?
|
41
58
|
end
|
42
59
|
|
43
|
-
def check_spacing(
|
44
|
-
range = node.value_source_range
|
60
|
+
def check_spacing(range)
|
45
61
|
offset = find_bang_offset(range)
|
46
62
|
|
47
63
|
return if character_at(range.end_pos, offset) != '!'
|
@@ -8,6 +8,13 @@ module SCSSLint
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def visit_variable(node)
|
11
|
+
# If the variable is using `!default` or `!global` (e.g. `$foo: bar
|
12
|
+
# !default;`) then `node.expr` will give us the source range just for the
|
13
|
+
# value (e.g. `bar`). In these cases, we want to use the source range of
|
14
|
+
# `node`, which will give us most of the entire line (e.g. `foo: bar
|
15
|
+
# !default`.
|
16
|
+
return check_semicolon(node) if node.global || node.guarded
|
17
|
+
|
11
18
|
check_semicolon(node.expr)
|
12
19
|
end
|
13
20
|
|
data/lib/scss_lint/version.rb
CHANGED
@@ -77,6 +77,64 @@ describe SCSSLint::Linter::BangFormat do
|
|
77
77
|
it { should_not report_lint }
|
78
78
|
end
|
79
79
|
|
80
|
+
context 'with a !default variable declaration' do
|
81
|
+
context 'and !default is used correctly' do
|
82
|
+
let(:scss) { <<-SCSS }
|
83
|
+
$foo: bar !default;
|
84
|
+
SCSS
|
85
|
+
|
86
|
+
it { should_not report_lint }
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'and there is no space before' do
|
90
|
+
let(:scss) { <<-SCSS }
|
91
|
+
$foo: bar!default;
|
92
|
+
SCSS
|
93
|
+
|
94
|
+
it { should report_lint line: 1 }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'with a !global variable declaration' do
|
99
|
+
context 'and !global is used correctly' do
|
100
|
+
let(:scss) { <<-SCSS }
|
101
|
+
$foo: bar !global;
|
102
|
+
SCSS
|
103
|
+
|
104
|
+
it { should_not report_lint }
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'and there is no space before' do
|
108
|
+
let(:scss) { <<-SCSS }
|
109
|
+
$foo: bar!global;
|
110
|
+
SCSS
|
111
|
+
|
112
|
+
it { should report_lint line: 1 }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'with an !optional @extend directive' do
|
117
|
+
context 'and !optional is used correctly' do
|
118
|
+
let(:scss) { <<-SCSS }
|
119
|
+
.foo {
|
120
|
+
@extend .bar !optional;
|
121
|
+
}
|
122
|
+
SCSS
|
123
|
+
|
124
|
+
it { should_not report_lint }
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'and there is no space before' do
|
128
|
+
let(:scss) { <<-SCSS }
|
129
|
+
.foo {
|
130
|
+
@extend .bar!optional;
|
131
|
+
}
|
132
|
+
SCSS
|
133
|
+
|
134
|
+
it { should report_lint line: 2 }
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
80
138
|
context 'when ! appears within a string' do
|
81
139
|
let(:scss) { <<-SCSS }
|
82
140
|
p:before { content: "!important"; }
|
@@ -23,6 +23,48 @@ describe SCSSLint::Linter::TrailingSemicolon do
|
|
23
23
|
it { should_not report_lint }
|
24
24
|
end
|
25
25
|
|
26
|
+
context 'when an !important property' do
|
27
|
+
context 'ends with a semicolon' do
|
28
|
+
let(:scss) { <<-SCSS }
|
29
|
+
p {
|
30
|
+
margin: 0 !important;
|
31
|
+
}
|
32
|
+
SCSS
|
33
|
+
|
34
|
+
it { should_not report_lint }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'ends with two semicolons' do
|
38
|
+
let(:scss) { <<-SCSS }
|
39
|
+
p {
|
40
|
+
margin: 0 !important;;
|
41
|
+
}
|
42
|
+
SCSS
|
43
|
+
|
44
|
+
it { should report_lint line: 2 }
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'has a space before the semicolon' do
|
48
|
+
let(:scss) { <<-SCSS }
|
49
|
+
p {
|
50
|
+
margin: 0 !important ;
|
51
|
+
}
|
52
|
+
SCSS
|
53
|
+
|
54
|
+
it { should report_lint line: 2 }
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'is missing a semicolon' do
|
58
|
+
let(:scss) { <<-SCSS }
|
59
|
+
p {
|
60
|
+
margin: 0 !important
|
61
|
+
}
|
62
|
+
SCSS
|
63
|
+
|
64
|
+
it { should report_lint line: 2 }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
26
68
|
context 'when a property ends with a space followed by a semicolon' do
|
27
69
|
let(:scss) { <<-SCSS }
|
28
70
|
p {
|
@@ -302,6 +344,84 @@ describe SCSSLint::Linter::TrailingSemicolon do
|
|
302
344
|
it { should_not report_lint }
|
303
345
|
end
|
304
346
|
|
347
|
+
context 'when a !default variable declaration' do
|
348
|
+
context 'ends with a semicolon' do
|
349
|
+
let(:scss) { '$foo: bar !default;' }
|
350
|
+
|
351
|
+
it { should_not report_lint }
|
352
|
+
end
|
353
|
+
|
354
|
+
context 'ends with two semicolons' do
|
355
|
+
let(:scss) { '$foo: bar !default;;' }
|
356
|
+
|
357
|
+
it { should report_lint }
|
358
|
+
end
|
359
|
+
|
360
|
+
context 'has a space before the semicolon' do
|
361
|
+
let(:scss) { '$foo: bar !default ;' }
|
362
|
+
|
363
|
+
it { should report_lint }
|
364
|
+
end
|
365
|
+
|
366
|
+
context 'is missing a semicolon' do
|
367
|
+
let(:scss) { '$foo: bar !default' }
|
368
|
+
|
369
|
+
it { should report_lint }
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
context 'when a !global variable declaration' do
|
374
|
+
context 'ends with a semicolon' do
|
375
|
+
let(:scss) { '$foo: bar !global;' }
|
376
|
+
|
377
|
+
it { should_not report_lint }
|
378
|
+
end
|
379
|
+
|
380
|
+
context 'ends with two semicolons' do
|
381
|
+
let(:scss) { '$foo: bar !global;;' }
|
382
|
+
|
383
|
+
it { should report_lint }
|
384
|
+
end
|
385
|
+
|
386
|
+
context 'has a space before the semicolon' do
|
387
|
+
let(:scss) { '$foo: bar !global ;' }
|
388
|
+
|
389
|
+
it { should report_lint }
|
390
|
+
end
|
391
|
+
|
392
|
+
context 'is missing a semicolon' do
|
393
|
+
let(:scss) { '$foo: bar !global' }
|
394
|
+
|
395
|
+
it { should report_lint }
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
context 'when the value of the variable is !important' do
|
400
|
+
context 'ends with a semicolon' do
|
401
|
+
let(:scss) { '$foo: bar !important;' }
|
402
|
+
|
403
|
+
it { should_not report_lint }
|
404
|
+
end
|
405
|
+
|
406
|
+
context 'ends with two semicolons' do
|
407
|
+
let(:scss) { '$foo: bar !important;;' }
|
408
|
+
|
409
|
+
it { should report_lint }
|
410
|
+
end
|
411
|
+
|
412
|
+
context 'has a space before the semicolon' do
|
413
|
+
let(:scss) { '$foo: bar !important ;' }
|
414
|
+
|
415
|
+
it { should report_lint }
|
416
|
+
end
|
417
|
+
|
418
|
+
context 'is missing a semicolon' do
|
419
|
+
let(:scss) { '$foo: bar !important' }
|
420
|
+
|
421
|
+
it { should report_lint }
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
305
425
|
context 'when variable declaration is followed by a comment and semicolon' do
|
306
426
|
let(:scss) { '$foo: bar // comment;' }
|
307
427
|
|
@@ -351,4 +471,88 @@ describe SCSSLint::Linter::TrailingSemicolon do
|
|
351
471
|
end
|
352
472
|
end
|
353
473
|
end
|
474
|
+
|
475
|
+
context 'with an @extend directive' do
|
476
|
+
context 'that ends with a semicolon' do
|
477
|
+
let(:scss) { <<-SCSS }
|
478
|
+
.foo {
|
479
|
+
@extend .bar;
|
480
|
+
}
|
481
|
+
SCSS
|
482
|
+
|
483
|
+
it { should_not report_lint }
|
484
|
+
end
|
485
|
+
|
486
|
+
context 'with two semicolons' do
|
487
|
+
let(:scss) { <<-SCSS }
|
488
|
+
.foo {
|
489
|
+
@extend .bar;;
|
490
|
+
}
|
491
|
+
SCSS
|
492
|
+
|
493
|
+
it { should report_lint line: 2 }
|
494
|
+
end
|
495
|
+
|
496
|
+
context 'with a space before the semicolon' do
|
497
|
+
let(:scss) { <<-SCSS }
|
498
|
+
.foo {
|
499
|
+
@extend .bar ;
|
500
|
+
}
|
501
|
+
SCSS
|
502
|
+
|
503
|
+
it { should report_lint line: 2 }
|
504
|
+
end
|
505
|
+
|
506
|
+
context 'that does not have a semicolon' do
|
507
|
+
let(:scss) { <<-SCSS }
|
508
|
+
.foo {
|
509
|
+
@extend .bar
|
510
|
+
}
|
511
|
+
SCSS
|
512
|
+
|
513
|
+
it { should report_lint line: 2 }
|
514
|
+
end
|
515
|
+
|
516
|
+
context 'with the !optional flag' do
|
517
|
+
context 'that ends with a semicolon' do
|
518
|
+
let(:scss) { <<-SCSS }
|
519
|
+
.foo {
|
520
|
+
@extend .bar !optional;
|
521
|
+
}
|
522
|
+
SCSS
|
523
|
+
|
524
|
+
it { should_not report_lint }
|
525
|
+
end
|
526
|
+
|
527
|
+
context 'with two semicolons' do
|
528
|
+
let(:scss) { <<-SCSS }
|
529
|
+
.foo {
|
530
|
+
@extend .bar !optional;;
|
531
|
+
}
|
532
|
+
SCSS
|
533
|
+
|
534
|
+
it { should report_lint line: 2 }
|
535
|
+
end
|
536
|
+
|
537
|
+
context 'with a space before the semicolon' do
|
538
|
+
let(:scss) { <<-SCSS }
|
539
|
+
.foo {
|
540
|
+
@extend .bar !optional ;
|
541
|
+
}
|
542
|
+
SCSS
|
543
|
+
|
544
|
+
it { should report_lint line: 2 }
|
545
|
+
end
|
546
|
+
|
547
|
+
context 'that does not have a semicolon' do
|
548
|
+
let(:scss) { <<-SCSS }
|
549
|
+
.foo {
|
550
|
+
@extend .bar !optional
|
551
|
+
}
|
552
|
+
SCSS
|
553
|
+
|
554
|
+
it { should report_lint line: 2 }
|
555
|
+
end
|
556
|
+
end
|
557
|
+
end
|
354
558
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scss_lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.42.
|
4
|
+
version: 0.42.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brigade Engineering
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-09-
|
12
|
+
date: 2015-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rainbow
|