suspiciouss 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 (38) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +3 -0
  5. data/Guardfile +3 -0
  6. data/LICENSE +22 -0
  7. data/README.md +41 -0
  8. data/Rakefile +5 -0
  9. data/bin/suspiciouss +5 -0
  10. data/lib/suspiciouss/linter.rb +85 -0
  11. data/lib/suspiciouss/result/formatter.rb +22 -0
  12. data/lib/suspiciouss/result/markdown.rb +22 -0
  13. data/lib/suspiciouss/result/plain_text.rb +20 -0
  14. data/lib/suspiciouss/suggestions/camel_case.rb +10 -0
  15. data/lib/suspiciouss/suggestions/indentation.rb +10 -0
  16. data/lib/suspiciouss/suggestions/overqualifying.rb +10 -0
  17. data/lib/suspiciouss/suggestions/styling_ids.rb +10 -0
  18. data/lib/suspiciouss/suggestions/styling_js_prefix.rb +10 -0
  19. data/lib/suspiciouss/suggestions/underscores.rb +10 -0
  20. data/lib/suspiciouss/suggestions/zero_units.rb +10 -0
  21. data/lib/suspiciouss/version.rb +3 -0
  22. data/lib/suspiciouss.rb +2 -0
  23. data/spec/fixtures/changeset.diff +39 -0
  24. data/spec/fixtures/result.md +19 -0
  25. data/spec/fixtures/result.txt +11 -0
  26. data/spec/linter_spec.rb +28 -0
  27. data/spec/result/markdown_spec.rb +13 -0
  28. data/spec/result/plain_text_spec.rb +13 -0
  29. data/spec/spec_helper.rb +7 -0
  30. data/spec/suggestions/camel_case_spec.rb +21 -0
  31. data/spec/suggestions/indentation_spec.rb +21 -0
  32. data/spec/suggestions/overqualifying_spec.rb +23 -0
  33. data/spec/suggestions/styling_ids_spec.rb +21 -0
  34. data/spec/suggestions/styling_js_prefix_spec.rb +21 -0
  35. data/spec/suggestions/underscores_spec.rb +21 -0
  36. data/spec/suggestions/zero_units_spec.rb +21 -0
  37. data/suspiciouss.gemspec +23 -0
  38. metadata +164 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5320a8d5092b9ddf367b0b82799b4e296d8c0f50
4
+ data.tar.gz: 39b11fc1009e5d25b2538379d8081c8e7642c606
5
+ SHA512:
6
+ metadata.gz: 7ec8f4021e8d3e2e69a0ab4a0029fe1a4d6d58e8501000ecb449bb8277be9fbff54124c8137b4df4a7682ec06dc673c6d19b08518eca2b87a577660449983d9c
7
+ data.tar.gz: 88624cfcb3b14ae0f1fd2e329bd6dfe40af099ef88ee64fce4992623523f8d1b498dc48ac4318791c358305550e82cb44f055cd6708ec7d63be324bb1d348e3d
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ nbproject
2
+ *sublime-*
3
+ .bundle
4
+ .DS_Store
5
+ *orig
6
+ pkg/
7
+ tmp/
8
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -c
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,3 @@
1
+ guard :rspec do
2
+ watch(/.*/) { 'spec' }
3
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Daniel Cruz Horts
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # suspiCiouSS
2
+
3
+ Suspiciouss is a CSS/Sass/Less linter that will provide you a report of common minor errors in your CSS development.
4
+
5
+ ## Usage
6
+
7
+ You can use it from the command line:
8
+
9
+ ```bash
10
+ git diff | suspiciouss
11
+ ```
12
+
13
+ Or you can use it in your Ruby code:
14
+
15
+ ```ruby
16
+ require 'suspiciouss'
17
+ Suspiciouss::Linter.new.process(your_git_diff_as_text)
18
+ ```
19
+
20
+ ## What is going to report?
21
+
22
+ You will be warned about the following issues in your code:
23
+
24
+ - camel case selectors
25
+ - excessive indentation
26
+ - overqualified element selectors
27
+ - styling #id selectors
28
+ - styling js prefixed selectors
29
+ - underscores in selectors
30
+ - property with units if value is 0
31
+
32
+ The report will be as text or markdown, depending if you got provided a command line input or was used programatically.
33
+
34
+ ## Contribute
35
+
36
+ - Fork it
37
+ - Write your feature with a test
38
+ - Issue a pull request
39
+ - ...
40
+ - Profit!
41
+
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new
5
+ task :default => :spec
data/bin/suspiciouss ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'suspiciouss'
4
+
5
+ Suspiciouss::Linter.new.process
@@ -0,0 +1,85 @@
1
+ require 'suspiciouss/suggestions/camel_case'
2
+ require 'suspiciouss/suggestions/indentation'
3
+ require 'suspiciouss/suggestions/overqualifying'
4
+ require 'suspiciouss/suggestions/styling_ids'
5
+ require 'suspiciouss/suggestions/styling_js_prefix'
6
+ require 'suspiciouss/suggestions/underscores'
7
+ require 'suspiciouss/suggestions/zero_units'
8
+ require 'suspiciouss/result/markdown'
9
+ require 'suspiciouss/result/plain_text'
10
+
11
+ module Suspiciouss
12
+ class Linter
13
+
14
+ KNOWN_FILETYPES = /(css|sass|scss|less)$/
15
+ SUGGESTIONS = Suspiciouss::Suggestions
16
+
17
+ def initialize
18
+ @result = Hash.new { |hash, key| hash[key] = [] }
19
+ end
20
+
21
+ # Process a diff file and return the result.
22
+ # It will read the input sequentially from a string or standard input.
23
+ def process(input = nil)
24
+ if input.nil?
25
+ input = STDIN
26
+ end
27
+
28
+ input.each_line do |line|
29
+ detect_filename_in line
30
+ parse line if @filename
31
+ end
32
+
33
+ if input.is_a? IO
34
+ puts result_as(Suspiciouss::Result::PlainText)
35
+ else
36
+ result_as(Suspiciouss::Result::Markdown)
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ # Detects if the diff block references a known file type
43
+ def detect_filename_in(full_line)
44
+ line_might_contain_filename = full_line.scan(/^\+\+\+ b(.+)$/)
45
+
46
+ return if line_might_contain_filename.empty?
47
+ @filename = line_might_contain_filename.first.first
48
+
49
+ if @filename !~ KNOWN_FILETYPES
50
+ @filename = nil
51
+ end
52
+ end
53
+
54
+ # Parses a line with each of the known suggestions and adds the result
55
+ # to the final output.
56
+ def parse(full_line)
57
+ @line = strip_diff_syntax full_line
58
+
59
+ return unless full_line =~ /^\+ /
60
+
61
+ known_suggestions.each do |suggestion|
62
+ if result = suggestion.parse(@line)
63
+ @result[@filename] << "#{result}: #{@line}"
64
+ end
65
+ end
66
+ end
67
+
68
+ # Renders the result using the specified formatter
69
+ def result_as(formatter)
70
+ formatter.new(@result).format
71
+ end
72
+
73
+ # Memoizes available suggestions in an array
74
+ def known_suggestions
75
+ @known_suggestions ||= SUGGESTIONS.constants.map do |suggestion_class|
76
+ SUGGESTIONS.const_get(suggestion_class).new
77
+ end
78
+ end
79
+
80
+ # Returns a line without the "+ " added by diff
81
+ def strip_diff_syntax(line)
82
+ line[2..-1]
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,22 @@
1
+ module Suspiciouss
2
+ module Result
3
+ class Formatter
4
+
5
+ def initialize(result)
6
+ @result = result
7
+ end
8
+
9
+ def output
10
+ output = ''
11
+
12
+ @result.each do |filename, errors|
13
+ unless errors.empty?
14
+ output << yield(filename, errors)
15
+ end
16
+ end
17
+
18
+ output
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require 'suspiciouss/result/formatter'
2
+
3
+ module Suspiciouss
4
+ module Result
5
+ class Markdown < Formatter
6
+
7
+ def format
8
+ output do |filename, errors|
9
+ ''.tap do |filename_errors|
10
+ filename_errors << " - Check file #{filename} for:\n"
11
+
12
+ filename_errors << "```\n"
13
+ errors.each do |error|
14
+ filename_errors << error
15
+ end
16
+ filename_errors << "```\n"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ require 'suspiciouss/result/formatter'
2
+
3
+ module Suspiciouss
4
+ module Result
5
+ class PlainText < Formatter
6
+
7
+ def format
8
+ output do |filename, errors|
9
+ filename_errors = "Check file #{filename} for:\n"
10
+
11
+ errors.each do |error|
12
+ filename_errors << " #{error.strip}\n"
13
+ end
14
+
15
+ filename_errors
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ module Suspiciouss
2
+ module Suggestions
3
+ class CamelCase
4
+
5
+ def parse(line)
6
+ "Don't use camelCase" if line =~ /[a-z][A-Z]{1}/
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Suspiciouss
2
+ module Suggestions
3
+ class Indentation
4
+
5
+ def parse(line)
6
+ "Indentation is too damn high" if line =~ /^ /
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Suspiciouss
2
+ module Suggestions
3
+ class Overqualifying
4
+
5
+ def parse(line)
6
+ "Don't overqualify your selectors" if line =~ /(div|label|a|input|span)(#|\.)\w+[^\w]/
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Suspiciouss
2
+ module Suggestions
3
+ class StylingIds
4
+
5
+ def parse(line)
6
+ "Don't style IDs" if line =~ /#\w+[^\w]/
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Suspiciouss
2
+ module Suggestions
3
+ class StylingJsPrefix
4
+
5
+ def parse(line)
6
+ "Don't style js- prefixed selectors" if line =~ /(\.|\#)js-/
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Suspiciouss
2
+ module Suggestions
3
+ class Underscores
4
+
5
+ def parse(line)
6
+ "Don't use underscores when naming classes" if line =~ /_/
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Suspiciouss
2
+ module Suggestions
3
+ class ZeroUnits
4
+
5
+ def parse(line)
6
+ "Don't add the unit if zero" if line =~ / (0px|0em|0rem|0%)/
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Suspiciouss
2
+ VERSION = '0.1'
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'suspiciouss/version'
2
+ require 'suspiciouss/linter'
@@ -0,0 +1,39 @@
1
+ --- a/path/to/file.css
2
+ +++ b/path/to/file.css
3
+
4
+
5
+ + #please-dont {color: #FFF;}
6
+
7
+
8
+ --- a/path/to/file.sass
9
+ +++ b/path/to/file.sass
10
+
11
+
12
+ + #pleaseDont
13
+ + color: $black
14
+
15
+
16
+ --- a/path/to/file.less
17
+ +++ b/path/to/file.less
18
+
19
+
20
+ + #pleaseDont {
21
+ + color: @black;
22
+ + }
23
+
24
+
25
+ --- a/path/to/file.scss
26
+ +++ b/path/to/file.scss
27
+
28
+
29
+ + #pleaseDont {
30
+ + color: $black;
31
+ + }
32
+
33
+
34
+ --- a/path/to/file.txt
35
+ +++ b/path/to/file.txt
36
+
37
+
38
+ + #undetectable {color: #000;}
39
+
@@ -0,0 +1,19 @@
1
+ - Check file /path/to/file.css for:
2
+ ```
3
+ Don't style IDs: #please-dont {color: #FFF;}
4
+ ```
5
+ - Check file /path/to/file.sass for:
6
+ ```
7
+ Don't use camelCase: #pleaseDont
8
+ Don't style IDs: #pleaseDont
9
+ ```
10
+ - Check file /path/to/file.less for:
11
+ ```
12
+ Don't use camelCase: #pleaseDont {
13
+ Don't style IDs: #pleaseDont {
14
+ ```
15
+ - Check file /path/to/file.scss for:
16
+ ```
17
+ Don't use camelCase: #pleaseDont {
18
+ Don't style IDs: #pleaseDont {
19
+ ```
@@ -0,0 +1,11 @@
1
+ Check file /path/to/file.css for:
2
+ Don't style IDs: #please-dont {color: #FFF;}
3
+ Check file /path/to/file.sass for:
4
+ Don't use camelCase: #pleaseDont
5
+ Don't style IDs: #pleaseDont
6
+ Check file /path/to/file.less for:
7
+ Don't use camelCase: #pleaseDont {
8
+ Don't style IDs: #pleaseDont {
9
+ Check file /path/to/file.scss for:
10
+ Don't use camelCase: #pleaseDont {
11
+ Don't style IDs: #pleaseDont {
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Linter do
4
+
5
+ let(:diff) { 'spec/fixtures/changeset.diff' }
6
+
7
+ describe '#process' do
8
+
9
+ context 'input as parameter' do
10
+
11
+ let(:input) { File.open(diff, 'r').read }
12
+ let(:output) { File.open('spec/fixtures/result.md', 'r').read }
13
+
14
+ subject { described_class.new.process(input) }
15
+
16
+ it { expect(subject).to eq output }
17
+ end
18
+
19
+ context 'input from standard input' do
20
+
21
+ let(:output) { File.open('spec/fixtures/result.txt', 'r').read }
22
+
23
+ subject { `cat #{diff} | bin/suspiciouss` }
24
+
25
+ it { expect(subject).to eq output }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Result::Markdown do
4
+
5
+ let(:result) { {'filename.css' => ['error1']} }
6
+
7
+ subject { described_class.new(result).format }
8
+
9
+ describe '#format' do
10
+
11
+ it { expect(subject).to eq " - Check file filename.css for:\n```\nerror1```\n" }
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Result::PlainText do
4
+
5
+ let(:result) { {'filename.css' => ['error1']} }
6
+
7
+ subject { described_class.new(result).format }
8
+
9
+ describe '#format' do
10
+
11
+ it { expect(subject).to eq "Check file filename.css for:\n error1\n" }
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'pry-debugger'
4
+
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ require 'suspiciouss'
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Suggestions::CamelCase do
4
+
5
+ subject { described_class.new.parse(line) }
6
+
7
+ describe '#parse' do
8
+
9
+ context 'invalid' do
10
+ let(:line) { '.pleaseDont {color: #000;}' }
11
+
12
+ it { should eq "Don't use camelCase" }
13
+ end
14
+
15
+ context 'valid' do
16
+ let(:line) { '.valid-selector {color: #FFF;}' }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Suggestions::Indentation do
4
+
5
+ subject { described_class.new.parse(line) }
6
+
7
+ describe '#parse' do
8
+
9
+ context 'invalid' do
10
+ let(:line) { ' .please-dont {}' }
11
+
12
+ it { should eq "Indentation is too damn high" }
13
+ end
14
+
15
+ context 'valid' do
16
+ let(:line) { ' .thank-you {}' }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Suggestions::Overqualifying do
4
+
5
+ describe '#parse' do
6
+
7
+ context 'invalid' do
8
+ let(:result) { "Don't overqualify your selectors" }
9
+
10
+ it { expect(subject.parse('div.nay {}')).to eq result }
11
+ it { expect(subject.parse('label.nay {}')).to eq result }
12
+ it { expect(subject.parse('a.nay {}')).to eq result }
13
+ it { expect(subject.parse('input.nay {}')).to eq result }
14
+ it { expect(subject.parse('span.nay {}')).to eq result }
15
+ end
16
+
17
+ context 'valid' do
18
+ let(:line) { '.yea {}' }
19
+
20
+ it { expect(subject.parse(line)).to be_nil }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Suggestions::StylingIds do
4
+
5
+ subject { described_class.new.parse(line) }
6
+
7
+ describe '#parse' do
8
+
9
+ context 'invalid' do
10
+ let(:line) { '#please-dont {}' }
11
+
12
+ it { should eq "Don't style IDs" }
13
+ end
14
+
15
+ context 'valid' do
16
+ let(:line) { ' > thanks {}' }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Suggestions::StylingJsPrefix do
4
+
5
+ subject { described_class.new.parse(line) }
6
+
7
+ describe '#parse' do
8
+
9
+ context 'invalid' do
10
+ let(:line) { '.js-tight-coupling {}' }
11
+
12
+ it { should eq "Don't style js- prefixed selectors" }
13
+ end
14
+
15
+ context 'valid' do
16
+ let(:line) { '.selector {}' }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Suggestions::Underscores do
4
+
5
+ subject { described_class.new.parse(line) }
6
+
7
+ describe '#parse' do
8
+
9
+ context 'invalid' do
10
+ let(:line) { '.please_dont {}' }
11
+
12
+ it { should eq "Don't use underscores when naming classes" }
13
+ end
14
+
15
+ context 'valid' do
16
+ let(:line) { '.valid-selector {}' }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Suspiciouss::Suggestions::ZeroUnits do
4
+
5
+ subject { described_class.new.parse(line) }
6
+
7
+ describe '#parse' do
8
+
9
+ context 'invalid' do
10
+ let(:line) { '.selector {margin: 0px;}' }
11
+
12
+ it { should eq "Don't add the unit if zero" }
13
+ end
14
+
15
+ context 'valid' do
16
+ let(:line) { '.selector {margin: 0;}' }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'suspiciouss/version'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = 'suspiciouss'
7
+ gem.version = Suspiciouss::VERSION
8
+ gem.authors = ['Daniel Cruz Horts']
9
+ gem.summary = 'Reports common CSS/Sass/Less errors'
10
+ gem.homepage = 'https://github.com/dncrht/suspiciouss'
11
+ gem.license = 'MIT'
12
+
13
+ gem.files = `git ls-files`.split($/)
14
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
15
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
16
+ gem.require_paths = ['lib']
17
+
18
+ gem.add_development_dependency 'rspec', '~> 2.12'
19
+ gem.add_development_dependency 'pry'
20
+ gem.add_development_dependency 'pry-debugger'
21
+ gem.add_development_dependency 'guard'
22
+ gem.add_development_dependency 'guard-rspec'
23
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: suspiciouss
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Cruz Horts
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-debugger
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description:
84
+ email:
85
+ executables:
86
+ - suspiciouss
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - .rspec
92
+ - Gemfile
93
+ - Guardfile
94
+ - LICENSE
95
+ - README.md
96
+ - Rakefile
97
+ - bin/suspiciouss
98
+ - lib/suspiciouss.rb
99
+ - lib/suspiciouss/linter.rb
100
+ - lib/suspiciouss/result/formatter.rb
101
+ - lib/suspiciouss/result/markdown.rb
102
+ - lib/suspiciouss/result/plain_text.rb
103
+ - lib/suspiciouss/suggestions/camel_case.rb
104
+ - lib/suspiciouss/suggestions/indentation.rb
105
+ - lib/suspiciouss/suggestions/overqualifying.rb
106
+ - lib/suspiciouss/suggestions/styling_ids.rb
107
+ - lib/suspiciouss/suggestions/styling_js_prefix.rb
108
+ - lib/suspiciouss/suggestions/underscores.rb
109
+ - lib/suspiciouss/suggestions/zero_units.rb
110
+ - lib/suspiciouss/version.rb
111
+ - spec/fixtures/changeset.diff
112
+ - spec/fixtures/result.md
113
+ - spec/fixtures/result.txt
114
+ - spec/linter_spec.rb
115
+ - spec/result/markdown_spec.rb
116
+ - spec/result/plain_text_spec.rb
117
+ - spec/spec_helper.rb
118
+ - spec/suggestions/camel_case_spec.rb
119
+ - spec/suggestions/indentation_spec.rb
120
+ - spec/suggestions/overqualifying_spec.rb
121
+ - spec/suggestions/styling_ids_spec.rb
122
+ - spec/suggestions/styling_js_prefix_spec.rb
123
+ - spec/suggestions/underscores_spec.rb
124
+ - spec/suggestions/zero_units_spec.rb
125
+ - suspiciouss.gemspec
126
+ homepage: https://github.com/dncrht/suspiciouss
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.0.2
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Reports common CSS/Sass/Less errors
150
+ test_files:
151
+ - spec/fixtures/changeset.diff
152
+ - spec/fixtures/result.md
153
+ - spec/fixtures/result.txt
154
+ - spec/linter_spec.rb
155
+ - spec/result/markdown_spec.rb
156
+ - spec/result/plain_text_spec.rb
157
+ - spec/spec_helper.rb
158
+ - spec/suggestions/camel_case_spec.rb
159
+ - spec/suggestions/indentation_spec.rb
160
+ - spec/suggestions/overqualifying_spec.rb
161
+ - spec/suggestions/styling_ids_spec.rb
162
+ - spec/suggestions/styling_js_prefix_spec.rb
163
+ - spec/suggestions/underscores_spec.rb
164
+ - spec/suggestions/zero_units_spec.rb