sasslint 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []