sasslint 0.0.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.
Files changed (46) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +29 -0
  4. data/bin/sasslint +6 -0
  5. data/lib/sasslint.rb +10 -0
  6. data/lib/sasslint/cli.rb +28 -0
  7. data/lib/sasslint/helpers/path_helper.rb +10 -0
  8. data/lib/sasslint/helpers/rule_importer.rb +25 -0
  9. data/lib/sasslint/rules/css/adjoining-classes.rb +52 -0
  10. data/lib/sasslint/rules/css/box-model.rb +108 -0
  11. data/lib/sasslint/rules/css/box-sizing.rb +35 -0
  12. data/lib/sasslint/rules/css/bulletproof-font-face.rb +73 -0
  13. data/lib/sasslint/rules/css/compatible-vendor-prefixes.rb +193 -0
  14. data/lib/sasslint/rules/css/display-property-grouping.rb +124 -0
  15. data/lib/sasslint/rules/css/duplicate-background-images.rb +44 -0
  16. data/lib/sasslint/rules/css/duplicate-properties.rb +53 -0
  17. data/lib/sasslint/rules/css/empty-rules.rb +41 -0
  18. data/lib/sasslint/rules/css/errors.rb +30 -0
  19. data/lib/sasslint/rules/css/fallback-colors.rb +84 -0
  20. data/lib/sasslint/rules/css/floats.rb +43 -0
  21. data/lib/sasslint/rules/css/font-faces.rb +37 -0
  22. data/lib/sasslint/rules/css/font-sizes.rb +42 -0
  23. data/lib/sasslint/rules/css/gradients.rb +71 -0
  24. data/lib/sasslint/rules/css/ids.rb +57 -0
  25. data/lib/sasslint/rules/css/import.rb +30 -0
  26. data/lib/sasslint/rules/css/important.rb +44 -0
  27. data/lib/sasslint/rules/css/known-properties.rb +36 -0
  28. data/lib/sasslint/rules/css/outline-none.rb +80 -0
  29. data/lib/sasslint/rules/css/overqualified-elements.rb +70 -0
  30. data/lib/sasslint/rules/css/qualified-headings.rb +45 -0
  31. data/lib/sasslint/rules/css/regex-selectors.rb +51 -0
  32. data/lib/sasslint/rules/css/rules-count.rb +35 -0
  33. data/lib/sasslint/rules/css/selector-max-approaching.rb +35 -0
  34. data/lib/sasslint/rules/css/selector-max.rb +35 -0
  35. data/lib/sasslint/rules/css/shorthand.rb +94 -0
  36. data/lib/sasslint/rules/css/star-property-hack.rb +34 -0
  37. data/lib/sasslint/rules/css/text-indent.rb +60 -0
  38. data/lib/sasslint/rules/css/underscore-property-hack.rb +34 -0
  39. data/lib/sasslint/rules/css/unique-headings.rb +81 -0
  40. data/lib/sasslint/rules/css/universal-selector.rb +42 -0
  41. data/lib/sasslint/rules/css/unqualified-attributes.rb +49 -0
  42. data/lib/sasslint/rules/css/vendor-prefix.rb +150 -0
  43. data/lib/sasslint/rules/css/zero-units.rb +41 -0
  44. data/lib/sasslint/version.rb +3 -0
  45. data/sasslint.gemspec +29 -0
  46. metadata +146 -0
@@ -0,0 +1,42 @@
1
+ # This rule is taken from https://github.com/stubbornella/csslint/tree/master/src/rules
2
+ #
3
+ #
4
+ # Copyright (c) 2011 Nicole Sullivan and Nicholas C. Zakas. All rights reserved.
5
+ # TODO: Paste the CSSLint LICENSE here.
6
+ #
7
+ #
8
+ # /*
9
+ # * Rule: Don't use universal selector because it's slow.
10
+ # */
11
+ # /*global CSSLint*/
12
+ # CSSLint.addRule({
13
+ #
14
+ # //rule information
15
+ # id: "universal-selector",
16
+ # name: "Disallow universal selector",
17
+ # desc: "The universal selector (*) is known to be slow.",
18
+ # browsers: "All",
19
+ #
20
+ # //initialization
21
+ # init: function(parser, reporter){
22
+ # var rule = this;
23
+ #
24
+ # parser.addListener("startrule", function(event){
25
+ # var selectors = event.selectors,
26
+ # selector,
27
+ # part,
28
+ # modifier,
29
+ # i, j, k;
30
+ #
31
+ # for (i=0; i < selectors.length; i++){
32
+ # selector = selectors[i];
33
+ #
34
+ # part = selector.parts[selector.parts.length-1];
35
+ # if (part.elementName == "*"){
36
+ # reporter.report(rule.desc, part.line, part.col, rule);
37
+ # }
38
+ # }
39
+ # });
40
+ # }
41
+ #
42
+ # });
@@ -0,0 +1,49 @@
1
+ # This rule is taken from https://github.com/stubbornella/csslint/tree/master/src/rules
2
+ #
3
+ #
4
+ # Copyright (c) 2011 Nicole Sullivan and Nicholas C. Zakas. All rights reserved.
5
+ # TODO: Paste the CSSLint LICENSE here.
6
+ #
7
+ #
8
+ # /*
9
+ # * Rule: Don't use unqualified attribute selectors because they're just like universal selectors.
10
+ # */
11
+ # /*global CSSLint*/
12
+ # CSSLint.addRule({
13
+ #
14
+ # //rule information
15
+ # id: "unqualified-attributes",
16
+ # name: "Disallow unqualified attribute selectors",
17
+ # desc: "Unqualified attribute selectors are known to be slow.",
18
+ # browsers: "All",
19
+ #
20
+ # //initialization
21
+ # init: function(parser, reporter){
22
+ # var rule = this;
23
+ #
24
+ # parser.addListener("startrule", function(event){
25
+ #
26
+ # var selectors = event.selectors,
27
+ # selector,
28
+ # part,
29
+ # modifier,
30
+ # i, j, k;
31
+ #
32
+ # for (i=0; i < selectors.length; i++){
33
+ # selector = selectors[i];
34
+ #
35
+ # part = selector.parts[selector.parts.length-1];
36
+ # if (part.type == parser.SELECTOR_PART_TYPE){
37
+ # for (k=0; k < part.modifiers.length; k++){
38
+ # modifier = part.modifiers[k];
39
+ # if (modifier.type == "attribute" && (!part.elementName || part.elementName == "*")){
40
+ # reporter.report(rule.desc, part.line, part.col, rule);
41
+ # }
42
+ # }
43
+ # }
44
+ #
45
+ # }
46
+ # });
47
+ # }
48
+ #
49
+ # });
@@ -0,0 +1,150 @@
1
+ # This rule is taken from https://github.com/stubbornella/csslint/tree/master/src/rules
2
+ #
3
+ #
4
+ # Copyright (c) 2011 Nicole Sullivan and Nicholas C. Zakas. All rights reserved.
5
+ # TODO: Paste the CSSLint LICENSE here.
6
+ #
7
+ #
8
+ # /*
9
+ # * Rule: When using a vendor-prefixed property, make sure to
10
+ # * include the standard one.
11
+ # */
12
+ # /*global CSSLint*/
13
+ # CSSLint.addRule({
14
+ #
15
+ # //rule information
16
+ # id: "vendor-prefix",
17
+ # name: "Require standard property with vendor prefix",
18
+ # desc: "When using a vendor-prefixed property, make sure to include the standard one.",
19
+ # browsers: "All",
20
+ #
21
+ # //initialization
22
+ # init: function(parser, reporter){
23
+ # var rule = this,
24
+ # properties,
25
+ # num,
26
+ # propertiesToCheck = {
27
+ # "-webkit-border-radius": "border-radius",
28
+ # "-webkit-border-top-left-radius": "border-top-left-radius",
29
+ # "-webkit-border-top-right-radius": "border-top-right-radius",
30
+ # "-webkit-border-bottom-left-radius": "border-bottom-left-radius",
31
+ # "-webkit-border-bottom-right-radius": "border-bottom-right-radius",
32
+ #
33
+ # "-o-border-radius": "border-radius",
34
+ # "-o-border-top-left-radius": "border-top-left-radius",
35
+ # "-o-border-top-right-radius": "border-top-right-radius",
36
+ # "-o-border-bottom-left-radius": "border-bottom-left-radius",
37
+ # "-o-border-bottom-right-radius": "border-bottom-right-radius",
38
+ #
39
+ # "-moz-border-radius": "border-radius",
40
+ # "-moz-border-radius-topleft": "border-top-left-radius",
41
+ # "-moz-border-radius-topright": "border-top-right-radius",
42
+ # "-moz-border-radius-bottomleft": "border-bottom-left-radius",
43
+ # "-moz-border-radius-bottomright": "border-bottom-right-radius",
44
+ #
45
+ # "-moz-column-count": "column-count",
46
+ # "-webkit-column-count": "column-count",
47
+ #
48
+ # "-moz-column-gap": "column-gap",
49
+ # "-webkit-column-gap": "column-gap",
50
+ #
51
+ # "-moz-column-rule": "column-rule",
52
+ # "-webkit-column-rule": "column-rule",
53
+ #
54
+ # "-moz-column-rule-style": "column-rule-style",
55
+ # "-webkit-column-rule-style": "column-rule-style",
56
+ #
57
+ # "-moz-column-rule-color": "column-rule-color",
58
+ # "-webkit-column-rule-color": "column-rule-color",
59
+ #
60
+ # "-moz-column-rule-width": "column-rule-width",
61
+ # "-webkit-column-rule-width": "column-rule-width",
62
+ #
63
+ # "-moz-column-width": "column-width",
64
+ # "-webkit-column-width": "column-width",
65
+ #
66
+ # "-webkit-column-span": "column-span",
67
+ # "-webkit-columns": "columns",
68
+ #
69
+ # "-moz-box-shadow": "box-shadow",
70
+ # "-webkit-box-shadow": "box-shadow",
71
+ #
72
+ # "-moz-transform" : "transform",
73
+ # "-webkit-transform" : "transform",
74
+ # "-o-transform" : "transform",
75
+ # "-ms-transform" : "transform",
76
+ #
77
+ # "-moz-transform-origin" : "transform-origin",
78
+ # "-webkit-transform-origin" : "transform-origin",
79
+ # "-o-transform-origin" : "transform-origin",
80
+ # "-ms-transform-origin" : "transform-origin",
81
+ #
82
+ # "-moz-box-sizing" : "box-sizing",
83
+ # "-webkit-box-sizing" : "box-sizing",
84
+ #
85
+ # "-moz-user-select" : "user-select",
86
+ # "-khtml-user-select" : "user-select",
87
+ # "-webkit-user-select" : "user-select"
88
+ # };
89
+ #
90
+ # //event handler for beginning of rules
91
+ # function startRule(){
92
+ # properties = {};
93
+ # num=1;
94
+ # }
95
+ #
96
+ # //event handler for end of rules
97
+ # function endRule(event){
98
+ # var prop,
99
+ # i, len,
100
+ # standard,
101
+ # needed,
102
+ # actual,
103
+ # needsStandard = [];
104
+ #
105
+ # for (prop in properties){
106
+ # if (propertiesToCheck[prop]){
107
+ # needsStandard.push({ actual: prop, needed: propertiesToCheck[prop]});
108
+ # }
109
+ # }
110
+ #
111
+ # for (i=0, len=needsStandard.length; i < len; i++){
112
+ # needed = needsStandard[i].needed;
113
+ # actual = needsStandard[i].actual;
114
+ #
115
+ # if (!properties[needed]){
116
+ # reporter.report("Missing standard property '" + needed + "' to go along with '" + actual + "'.", properties[actual][0].name.line, properties[actual][0].name.col, rule);
117
+ # } else {
118
+ # //make sure standard property is last
119
+ # if (properties[needed][0].pos < properties[actual][0].pos){
120
+ # reporter.report("Standard property '" + needed + "' should come after vendor-prefixed property '" + actual + "'.", properties[actual][0].name.line, properties[actual][0].name.col, rule);
121
+ # }
122
+ # }
123
+ # }
124
+ #
125
+ # }
126
+ #
127
+ # parser.addListener("startrule", startRule);
128
+ # parser.addListener("startfontface", startRule);
129
+ # parser.addListener("startpage", startRule);
130
+ # parser.addListener("startpagemargin", startRule);
131
+ # parser.addListener("startkeyframerule", startRule);
132
+ #
133
+ # parser.addListener("property", function(event){
134
+ # var name = event.property.text.toLowerCase();
135
+ #
136
+ # if (!properties[name]){
137
+ # properties[name] = [];
138
+ # }
139
+ #
140
+ # properties[name].push({ name: event.property, value : event.value, pos:num++ });
141
+ # });
142
+ #
143
+ # parser.addListener("endrule", endRule);
144
+ # parser.addListener("endfontface", endRule);
145
+ # parser.addListener("endpage", endRule);
146
+ # parser.addListener("endpagemargin", endRule);
147
+ # parser.addListener("endkeyframerule", endRule);
148
+ # }
149
+ #
150
+ # });
@@ -0,0 +1,41 @@
1
+ # This rule is taken from https://github.com/stubbornella/csslint/tree/master/src/rules
2
+ #
3
+ #
4
+ # Copyright (c) 2011 Nicole Sullivan and Nicholas C. Zakas. All rights reserved.
5
+ # TODO: Paste the CSSLint LICENSE here.
6
+ #
7
+ #
8
+ # /*
9
+ # * Rule: You don't need to specify units when a value is 0.
10
+ # */
11
+ # /*global CSSLint*/
12
+ # CSSLint.addRule({
13
+ #
14
+ # //rule information
15
+ # id: "zero-units",
16
+ # name: "Disallow units for 0 values",
17
+ # desc: "You don't need to specify units when a value is 0.",
18
+ # browsers: "All",
19
+ #
20
+ # //initialization
21
+ # init: function(parser, reporter){
22
+ # var rule = this;
23
+ #
24
+ # //count how many times "float" is used
25
+ # parser.addListener("property", function(event){
26
+ # var parts = event.value.parts,
27
+ # i = 0,
28
+ # len = parts.length;
29
+ #
30
+ # while(i < len){
31
+ # if ((parts[i].units || parts[i].type == "percentage") && parts[i].value === 0 && parts[i].type != "time"){
32
+ # reporter.report("Values of 0 shouldn't have units specified.", parts[i].line, parts[i].col, rule);
33
+ # }
34
+ # i++;
35
+ # }
36
+ #
37
+ # });
38
+ #
39
+ # }
40
+ #
41
+ # });
@@ -0,0 +1,3 @@
1
+ module SassLint
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sasslint/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "sasslint"
8
+ spec.version = SassLint::VERSION
9
+ spec.authors = ["Roman Stranghoener", "Falk Hoppe"]
10
+ spec.email = ["stranghoener@googlemail.com"]
11
+ spec.description = "A linter for Sass, based on the idea and concepts of csslint."
12
+ spec.summary = "A linter for Sass, based on the idea and concepts of csslint."
13
+ spec.homepage = "https://github.com/rstrangh/sasslint"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = %w(LICENSE.txt README.md sasslint.gemspec)
17
+ spec.files += Dir.glob("bin/**/*")
18
+ spec.files += Dir.glob("lib/**/*.rb")
19
+
20
+ spec.executables = %w{sasslint}
21
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "thor"
26
+
27
+ spec.add_dependency "thor"
28
+ spec.add_dependency "activesupport"
29
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sasslint
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Roman Stranghoener
8
+ - Falk Hoppe
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: thor
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: thor
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: activesupport
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ description: A linter for Sass, based on the idea and concepts of csslint.
71
+ email:
72
+ - stranghoener@googlemail.com
73
+ executables:
74
+ - sasslint
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - LICENSE.txt
79
+ - README.md
80
+ - sasslint.gemspec
81
+ - bin/sasslint
82
+ - lib/sasslint/cli.rb
83
+ - lib/sasslint/helpers/path_helper.rb
84
+ - lib/sasslint/helpers/rule_importer.rb
85
+ - lib/sasslint/rules/css/adjoining-classes.rb
86
+ - lib/sasslint/rules/css/box-model.rb
87
+ - lib/sasslint/rules/css/box-sizing.rb
88
+ - lib/sasslint/rules/css/bulletproof-font-face.rb
89
+ - lib/sasslint/rules/css/compatible-vendor-prefixes.rb
90
+ - lib/sasslint/rules/css/display-property-grouping.rb
91
+ - lib/sasslint/rules/css/duplicate-background-images.rb
92
+ - lib/sasslint/rules/css/duplicate-properties.rb
93
+ - lib/sasslint/rules/css/empty-rules.rb
94
+ - lib/sasslint/rules/css/errors.rb
95
+ - lib/sasslint/rules/css/fallback-colors.rb
96
+ - lib/sasslint/rules/css/floats.rb
97
+ - lib/sasslint/rules/css/font-faces.rb
98
+ - lib/sasslint/rules/css/font-sizes.rb
99
+ - lib/sasslint/rules/css/gradients.rb
100
+ - lib/sasslint/rules/css/ids.rb
101
+ - lib/sasslint/rules/css/import.rb
102
+ - lib/sasslint/rules/css/important.rb
103
+ - lib/sasslint/rules/css/known-properties.rb
104
+ - lib/sasslint/rules/css/outline-none.rb
105
+ - lib/sasslint/rules/css/overqualified-elements.rb
106
+ - lib/sasslint/rules/css/qualified-headings.rb
107
+ - lib/sasslint/rules/css/regex-selectors.rb
108
+ - lib/sasslint/rules/css/rules-count.rb
109
+ - lib/sasslint/rules/css/selector-max-approaching.rb
110
+ - lib/sasslint/rules/css/selector-max.rb
111
+ - lib/sasslint/rules/css/shorthand.rb
112
+ - lib/sasslint/rules/css/star-property-hack.rb
113
+ - lib/sasslint/rules/css/text-indent.rb
114
+ - lib/sasslint/rules/css/underscore-property-hack.rb
115
+ - lib/sasslint/rules/css/unique-headings.rb
116
+ - lib/sasslint/rules/css/universal-selector.rb
117
+ - lib/sasslint/rules/css/unqualified-attributes.rb
118
+ - lib/sasslint/rules/css/vendor-prefix.rb
119
+ - lib/sasslint/rules/css/zero-units.rb
120
+ - lib/sasslint/version.rb
121
+ - lib/sasslint.rb
122
+ homepage: https://github.com/rstrangh/sasslint
123
+ licenses:
124
+ - MIT
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.0.3
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: A linter for Sass, based on the idea and concepts of csslint.
146
+ test_files: []