Coder Social home page Coder Social logo

scss-lint's Introduction

Gem Version Build Status Code Climate Coverage Status Inline docs

SCSS-Lint Logo

scss-lint is a tool to help keep your SCSS files clean and readable by running it against a collection of configurable linter rules. You can run it manually from the command line, or integrate it into your SCM hooks.

NOTICE: Consider other tools before adopting SCSS-Lint

The Sass core team is now building Sass in Dart instead of Ruby, and will no longer be maintaining the Ruby implementation unless a maintainer steps up to help. Since the SCSS-Lint project relies on the Ruby Sass implementation, this means it will eventually not support the latest Sass features and bug fixes.

One alternative worthy of consideration is stylelint, which supports SCSS natively. If you want to use SCSS-specific rules in addition to stylelint core rules, you need to configure stylelint plugins like stylelint-scss or stylelint-order.

The SCSS-Lint project will continue to accept pull requests and provide basic support on the issue tracker.

Requirements

  • Ruby 2.4+
  • Sass 3.5.5+
  • Files you wish to lint must be written in SCSS (not Sass) syntax

Installation

gem install scss_lint

...or add the following to your Gemfile and run bundle install:

gem 'scss_lint', require: false

The require: false is necessary because scss-lint monkey patches Sass in order to properly traverse the parse tree created by the Sass parser. This can interfere with other applications that invoke the Sass parser after scss-lint libraries have been loaded at runtime, so you should only require it in the context in which you are linting, nowhere else.

Usage

Run scss-lint from the command line by passing in a directory (or multiple directories) to recursively scan:

scss-lint app/assets/stylesheets/

You can also specify a list of files explicitly:

scss-lint app/assets/stylesheets/**/*.css.scss

...or you can lint a file passed via standard input (note the --stdin-file-path flag is required when passing via standard input):

cat some-file | scss-lint --stdin-file-path=path/to/treat/stdin/as/having.scss

scss-lint will output any problems with your SCSS, including the offending filename and line number (if available).

Command Line Flag Description
-c/--config Specify a configuration file to use
-e/--exclude Exclude one or more files from being linted
-f/--format Output format (see Formatters)
-o/--out Write output to a file instead of STDOUT
-r/--require Require file/library (mind $LOAD_PATH, uses Kernel.require)
-i/--include-linter Specify which linters you specifically want to run
-x/--exclude-linter Specify which linters you don't want to run
--stdin-file-path When linting a file passed via standard input, treat it as having the specified path to apply the appropriate configuration
--[no-]color Whether to output in color
-h/--help Show command line flag documentation
--show-formatters Show all available formatters
--show-linters Show all available linters
-v/--version Show version

When running scss-lint with JRuby, using JRuby's --dev flag will probably improve performance.

Configuration

scss-lint loads configuration in the following order of precedence:

  1. Configuration file specified via the --config flag
  2. Configuration from .scss-lint.yml in the current working directory, if it exists
  3. Configuration from .scss-lint.yml in the user's home directory, if it exists

All configurations extend the default configuration.

Note: The first configuration file found is the one that is loaded, e.g. the .scss-lint.yml file in the current working directory is loaded instead of the one in the user's home directory—they are not merged with each other.

Here's an example configuration file:

scss_files: 'app/assets/stylesheets/**/*.css.scss'

exclude: 'app/assets/stylesheets/plugins/**'

linters:
  BorderZero:
    enabled: false

  Indentation:
    exclude:
      - 'path/to/file.scss'
      - 'path/to/directory/**'
    severity: warning
    width: 2

All linters have an enabled option which can be true or false, which controls whether the linter is run, along with linter-specific options. The defaults are defined in config/default.yml.

Severities

The severity linter option allows you to specify whether the lint should be treated as a warning or an error. Warnings cause scss-lint to exit with a different error code than errors (unless both warnings and errors are present, in which case the error exit code is returned). This is useful when integrating scss-lint with build systems or other executables, as you can rely on its exit status code to indicate whether a lint actually requires attention.

You can also define the default severity for all linters by setting the global severity option.

Excluding Files

The exclude directive allows you to specify a glob pattern of files that should not be linted by scss-lint. Paths are relative to the location of the config file itself if they are not absolute paths. If an inherited file specifies the exclude directive, the two exclusion lists are combined. Any additional exclusions specified via the --exclude flag are also combined. If you need to exclude files for a single linter you can specify the list of files using the linter's exclude configuration option.

Generating a Configuration

To start using scss-lint you can use the Config Formatter, which will generate an .scss-lint.yml configuration file with all linters which caused a lint disabled. Starting with this as your configuration you can slowly enable each linter and fix any lints one by one.

Disabling Linters via Source

For special cases where a particular lint doesn't make sense in a specific area of a file, special inline comments can be used to enable/disable linters. Some examples are provided below:

Disable for the entire file

// scss-lint:disable BorderZero
p {
  border: none; // No lint reported
}

Disable a few linters

// scss-lint:disable BorderZero, StringQuotes
p {
  border: none; // No lint reported
  content: "hello"; // No lint reported
}

Disable all lints within a block (and all contained blocks)

p {
  // scss-lint:disable BorderZero
  border: none; // No lint reported
}

a {
  border: none; // Lint reported
}

Disable and enable again

// scss-lint:disable BorderZero
p {
  border: none; // No lint reported
}
// scss-lint:enable BorderZero

a {
  border: none; // Lint reported
}

Disable for just one line

p {
  // No lint reported:
  border: none; // scss-lint:disable BorderZero

  a {
    border: none; // Lint reported
  }
}

Disable/enable all linters

// scss-lint:disable all
p {
  border: none; // No lint reported
}
// scss-lint:enable all

a {
  border: none; // Lint reported
}

Formatters

Default

The default formatter is intended to be easy to consume by both humans and external tools.

scss-lint [scss-files...]
test.scss:2:1 [W] StringQuotes: Prefer single quoted strings
test.scss:2:1 [W] Indentation: Line should be indented 0 spaces, but was indented 1 space
test.scss:5:1 [W] StringQuotes: Prefer single quoted strings
test.scss:6:8 [W] UrlQuotes: URLs should be enclosed in quotes

CleanFiles

Displays a list of all files that were free of lints.

Config

Returns a valid .scss-lint.yml configuration where all linters which caused a lint are disabled. Starting with this as your configuration, you can slowly enable each linter and fix any lints one by one.

scss-lint --format=Config [scss-files...]
linters:
  Indentation:
    enabled: false
  StringQuotes:
    enabled: false
  UrlQuotes:
    enabled: false

Files

Useful when you just want to open all offending files in an editor. This will just output the names of the files so that you can execute the following to open them all:

scss-lint --format=Files [scss-files...] | xargs vim

JSON

Outputs JSON with filenames and an array of issue objects.

{
  "test.css": [
    {"line": 2, "column": 1, "length": 2, "severity": "warning", "reason": "Prefer single quoted strings", "linter": "StringQuotes"},
    {"line": 2, "column": 1, "length": 1, "severity": "warning", "reason": "Line should be indented 0 spaces, but was indented 1 spaces", "linter": "Indentation"},
    {"line": 5, "column": 5, "length": 2, "severity": "warning", "reason": "Prefer single quoted strings", "linter": "StringQuotes"},
    {"line": 6, "column": 4, "length": 9, "severity": "warning", "reason": "URLs should be enclosed in quotes", "linter": "UrlQuotes"}
  ]
}

TAP

Outputs TAP version 13 format.

TAP version 13
1..5
ok 1 - ok1.scss
not ok 2 - not-ok1.scss:123:10 SCSSLint::Linter::PrivateNamingConvention
  ---
  message: Description of lint 1
  severity: warning
  data:
    file: not-ok1.scss
    line: 123
    column: 10
  ---
not ok 3 - not-ok2.scss:20:2 SCSSLint::Linter::PrivateNamingConvention
  ---
  message: Description of lint 2
  severity: error
  data:
    file: not-ok2.scss
    line: 20
    column: 2
  ---
not ok 4 - not-ok2.scss:21:3 SCSSLint::Linter::PrivateNamingConvention
  ---
  message: Description of lint 3
  severity: warning
  data:
    file: not-ok2.scss
    line: 21
    column: 3
  ---
ok 5 - ok2.scss

Stats

Outputs statistics about how many lints of each type were found, and across how many files. This reporter can help in cleaning up a large codebase, allowing you to fix and then enable one lint type at a time.

15  ColorKeyword                  (across  1 files)
15  ColorVariable                 (across  1 files)
11  StringQuotes                  (across 11 files)
11  EmptyLineBetweenBlocks        (across 11 files)
 5  Indentation                   (across  1 files)
 5  QualifyingElement             (across  2 files)
 4  MergeableSelector             (across  1 files)
--  ----------------------        -----------------
66  total                         (across 12 files)

Plugins

There are also formatters that integrate with third-party tools which are available as plugins.

Checkstyle

Outputs an XML document with <checkstyle>, <file>, and <error> tags. Suitable for consumption by tools like Jenkins with the Checkstyle plugin.

gem install scss_lint_reporter_checkstyle
scss-lint --require=scss_lint_reporter_checkstyle --format=Checkstyle [scss-files...]
<?xml version="1.0" encoding="utf-8"?>
<checkstyle version="1.5.6">
  <file name="test.css">
    <error line="2" severity="warning" message="Prefer single quoted strings" />
    <error line="2" severity="warning" message="Line should be indented 0 spaces, but was indented 1 spaces" />
    <error line="5" severity="warning" message="Prefer single quoted strings" />
    <error line="6" severity="warning" message="URLs should be enclosed in quotes" />
  </file>
</checkstyle>

Exit Status Codes

scss-lint tries to use semantic exit statuses wherever possible, but the full list of codes and the conditions under which they are returned is listed here for completeness.

Exit Status Description
0 No lints were found
1 Lints with a severity of warning were reported (no errors)
2 One or more errors were reported (and any number of warnings)
64 Command line usage error (invalid flag, etc.)
66 One or more files specified were not found
69 Required library specified via -r/--require flag was not found
70 Unexpected error (i.e. a bug); please report it
78 Invalid configuration file; your YAML is likely incorrect
80 Files glob patterns specified did not match any files.

Linters

scss-lint is a customizable tool with opinionated defaults that helps you enforce a consistent style in your SCSS. For these opinionated defaults, we've had to make calls about what we think are the "best" style conventions, even when there are often reasonable arguments for more than one possible style.

Should you want to customize the checks run against your code, you can do so by editing your configuration file to match your preferred style.

Custom Linters

scss-lint allows you to create custom linters specific to your project. By default, it will load linters from the .scss-linters in the root of your repository. You can customize which directories to load from via the plugin_directories option in your .scss-lint.yml configuration file. See the linters directory for examples of how to write linters. All linters loaded from directories in plugin_directories are enabled by default, and you can set their configuration in your .scss-lint.yml.

# .scss-linters/another_linter.rb

module SCSSLint
  class Linter::AnotherLinter < Linter
    include LinterRegistry

    ...
  end
end
# .scss-lint.yml
plugin_directories: ['.scss-linters', '.another_directory']

linters:
  AnotherLinter:
    enabled: true
    some_option: [1, 2, 3]

You can also load linters packaged as gems by specifying the gems via the plugin_gems configuration option. See the scss_lint_plugin_example for an example of how to structure these plugins.

If the gem is packaged with an .scss-lint.yml file in its root directory then this will be merged with your configuration. This provides a convenient way for organizations to define a single repo with their scss-lint configuration and custom linters and use them across multiple projects. You can always override plugin configuration with your repo's .scss-lint.yml file.

# .scss-lint.yml
plugin_gems: ['scss_lint_plugin_example']

Note that you don't need to publish a gem to Rubygems to take advantage of this feature. Using Bundler, you can specify your plugin gem in your project's Gemfile and reference its git repository instead:

# Gemfile
gem 'scss_lint_plugin_example', git: 'git://github.com/cih/scss_lint_plugin_example'

As long as you execute scss-lint via bundle exec scss-lint, it should be able to load the gem.

Preprocessing

Sometimes SCSS files need to be preprocessed before being linted. This is made possible with two options that can be specified in your configuration file.

The preprocess_command option specifies the command to run once per SCSS file. The command can be specified with arguments. The contents of a SCSS file will be written to STDIN, and the processed SCSS contents must be written to STDOUT. If the process exits with a code other than 0, scss-lint will immediately exit with an error.

For example, preprocess_command: "cat" specifies a simple no-op preprocessor (on Unix-like systems). cat simply writes the contents of STDIN back out to STDOUT.

Metadata codeblocks like Jekyll Front Matter at the beginning of SCSS files can cause a syntax error when SCSS-Lint does not encounter Sass at the first line of the file, e.g. Invalid CSS after "@charset "utf-8"": expected "{", was ";". To search the first line for front matter's triple dash delimiter ---, strip out the YAML codeblock and pass the result to SCSS-Lint with line numbers preserved, you can use preprocess_command: "sed '1{/^---$/{:a N;/---$/!ba;d}}'" -- please note this sed command is valid for gnu-sed. If you are using the FreeBSD version of sed that ships with Mac OS X by default, it will throw an EOF error. You may solve this error by installing Homebrew, running brew install gnu-sed, and then substituting gsed for sed in the preprocess_command.

If only some SCSS files need to be preprocessed, you may use the preprocess_files option to specify a list of file globs that need preprocessing. Preprocessing only a subset of files should make scss-lint more performant.

Automated Code Review

Codacy

Codacy automates code reviews and monitors code quality on every commit and pull request. With Codacy you have scss-lint analysis out-of-the-box, and it is free for open source projects. It gives visibility into the technical debt and it can track code style and security issues, code coverage, code duplication, cyclomatic complexity and enforce best practices.

Editor Integration

Vim

You can have scss-lint automatically run against your SCSS files after saving by using the Syntastic plugin. If you already have the plugin, just add let g:syntastic_scss_checkers = ['scss_lint'] to your .vimrc.

IntelliJ

Install the SCSS Lint plugin for IntelliJ

Sublime Text

Install the Sublime scss-lint plugin.

Atom

Install the Atom scss-lint plugin. It is a part of the atomlinter project, so if you are already using other linter plugins, you can keep them in one place.

Emacs

Install and enable both scss-mode and flycheck-mode. You can enable automatic linting for scss-mode buffers with (add-hook 'scss-mode-hook 'flycheck-mode) in your init.el.

TextMate 2

If you use TextMate 2, you can install the SCSS-Lint.tmbundle bundle.

Visual Studio Code

If you use Visual Studio Code, you can install the scss-lint extension

Git Integration

If you'd like to integrate scss-lint into your Git workflow, check out our Git hook manager, overcommit.

Rake Integration

To execute scss-lint via a Rake task, ensure you have rake in your gem path (e.g. by adding to your Gemfile), and add the following to your Rakefile:

require 'scss_lint/rake_task'

SCSSLint::RakeTask.new

When you execute rake scss_lint, the above configuration is equivalent to just running scss-lint, which will lint all .scss files in the current working directory and its descendants.

You can customize the task by writing:

require 'scss_lint/rake_task'

SCSSLint::RakeTask.new do |t|
  t.config = 'custom/config.yml'
  t.args = ['--format', 'JSON', '--out', 'results.txt']
  t.files = Dir.glob(['app/assets', 'custom/*.scss'])
end

You can specify any command line arguments in the args attribute that are allowed by the scss-lint Ruby binary script. Each argument must be passed as an Array element, rather than one String with spaces.

You can also use this custom configuration with a set of files specified via the command line (note that this will not expand glob patterns):

# Single quotes prevent shell glob expansion
rake 'scss_lint[app/assets, custom/file-with-a-literal-asterisk-*.scss]'

Files specified in this manner take precedence over the files attribute initialized in the configuration above.

Maven Integration

Maven integration is available as part of the Sass maven plugin scss-lint since version 2.3 Check out the plugin documentation.

The Maven plugin comes with the necessary libraries included, a separate installation of ruby or scss-lint is not required.

Contributing

We love getting feedback with or without pull requests. If you do add a new feature, please add tests so that we can avoid breaking it in the future.

Speaking of tests, we use rspec, which can be run like so:

bundle exec rspec

After you get the unit tests passing, you probably want to see your version of scss-lint in action. You can use Bundler to execute your binary locally from within your project's directory:

bundle exec bin/scss-lint

Community

All major discussion surrounding SCSS-Lint happens on the GitHub issues page.

You can also follow @scss_lint on Twitter.

Changelog

If you're interested in seeing the changes and bug fixes between each version of scss-lint, read the SCSS-Lint Changelog.

Code of conduct

This project adheres to the Open Code of Conduct. By participating, you are expected to honor this code.

License

This project is released under the MIT license.

scss-lint's People

Contributors

alex-slynko avatar asottile avatar cih avatar connorshea avatar davidtheclark avatar elalemanyo avatar elstgav avatar geniou avatar ivantsepp avatar lencioni avatar loadedsith avatar lpil avatar mbertolacci avatar mikesherov avatar mmwtsn avatar mprins avatar nekomaho avatar nschonni avatar oliverklee avatar pocke avatar ruedap avatar sds avatar sjdemartini avatar srawlins avatar tagliala avatar tnir avatar trotzig avatar wincent avatar yujinakayama avatar zacharydenton avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scss-lint's Issues

bug with interpreted properties.

@mixin prefixer-value ($property, $value, $prefixes) {
    @each $prefix in $prefixes {
        @if $prefix == webkit and $prefix-for-webkit == true {
            #{$property}: -webkit-#{$value};
        }
        @else if $prefix == moz and $prefix-for-mozilla == true {
            #{$property}: -moz-#{$value};
        }
        @else if $prefix == ms and $prefix-for-microsoft == true {
            #{$property}: -ms-#{$value};
        }
        @else if $prefix == o and $prefix-for-opera == true {
            #{$property}: -o-#{$value};
        }
        @else if $prefix == spec and $prefix-for-spec == true {
            #{$property}: $value;
        }
        @else  {
            @warn "Unrecognized prefix: #{$prefix}";
        }
    }
}

I've got this mixin and scss-lint throws errors at it. because of the #{$property}

Errors when trying to run scss-lint

Hi - I was hoping someone might be able to help me figure out why scss-lint is failing in my environment. I can successfully install scss-lint, but when I try to run it, I get the following errors:

/usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/runner.rb:38:in `find_lints': /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/engine.rb:5: odd number list for Hash (SyntaxError)
    ENGINE_OPTIONS = { cache: false, syntax: :scss }
                             ^
/usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/engine.rb:5: syntax error, unexpected ':', expecting '}'
    ENGINE_OPTIONS = { cache: false, syntax: :scss }
                             ^
/usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/engine.rb:5: Can't assign to false
    ENGINE_OPTIONS = { cache: false, syntax: :scss }
                                    ^
/usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/engine.rb:5: syntax error, unexpected ':', expecting '='
    ENGINE_OPTIONS = { cache: false, syntax: :scss }
                                            ^
        from /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/runner.rb:29:in `run'
        from /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/runner.rb:28:in `each'
        from /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/runner.rb:28:in `run'
        from /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/lib/scss_lint/cli.rb:55:in `run'
        from /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/bin/scss-lint:7
        from /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/bin/scss-lint:5:in `tap'
        from /usr/lib64/ruby/gems/1.8/gems/scss-lint-0.6.7/bin/scss-lint:5
        from /usr/bin/scss-lint:23:in `load'
        from /usr/bin/scss-lint:23
[1]    15586 exit 1     scss-lint scss

I'm not sure if the issue might be my older version of ruby coming from the yum package manager.

ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

Gracefully handle failures in linters

Right now, if a linter fails on some input file, we print out a stacktrace but not any information about which file actually caused the failure.

In order to make it easier for developers to report bugs, we should tell them which file the linter failed on so they can include the contents of that file with the bug report.

No way to remove linter.

when I call scss-lint /my/dir -i property_format_linter

it doesn't remove the PropertyFormatLinter.

Cannot be used as a gem

Hi guys!

I tried to use scss-lint as a gem, to add a spec in my project. I have encountered several issues. The first is that when you load sass (https://github.com/causes/scss-lint/blob/master/lib/scss_lint.rb#L15) and sass loads sass/script (https://github.com/nex3/sass/blob/stable/lib/sass/engine.rb#L40) instead of loading the correct file, it loads scss-lint file (https://github.com/causes/scss-lint/blob/master/lib/sass/script.rb). Then, in here https://github.com/nex3/sass/blob/stable/lib/sass/scss/parser.rb#L1013 SASS blows up, because the constant Sass::Script::Parser is not set (undefined constant error).

So, my question is: is the Gem only to be used as CLI? Or you wanna try to fix it?

Best,

Sass version problem (scss-lint vs. Compass)

Hey, great utility you guys have here, just found it. Question if I may (first time caller) and not a huge Ruby expert so be kind.

When I install scss-lint it upgrades my Sass to 'sass' (= 3.3.0.rc.1) from 3.2.12 (required by Compass).

This breaks Compass with the following error

$ compass -v
/Users/ehenderson/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:110:in 'require': cannot load such file -- sass/script/node (LoadError)
    from /Users/ehenderson/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:110:in 'rescue in require'
:

scss-lint works OK but Compass does not. When I put the Sass version back to 3.2.12, Compass works OK but now scss-lint says:

$ scss-lint .
/Users/ehenderson/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/dependency.rb:296:in 'to_specs': Could not find 'sass' (= 3.3.0.rc.1) - did find: [sass-3.2.12] (Gem::LoadError)
:

Is there a way round this, fix or can I help fix it some how. Keen to contribute with your project.

Thanks

E.

Spurious shortest shorthand failure

This is being incorrectly marked as shortenable:

padding: calc-em(10px, 12px) calc-em(15px, 12px);

I'm guessing it thinks the second 12px (or maybe 12px)?) can be left off.

Add custom matcher to spec suite

Almost all of our specs take the exact same forms:

  • given snippet, expect clean result
  • given snippet, expect a lint (with optional line number)

I am normally not a huge fan of being overly clever in spec suites, but this seems like a good situation in which to apply some DRY-ing in some form (either a custom matcher, or some kind of helper). It would mean that we could reduce the physical "volume" of the suite in lines, even as we add more examples.

Assigning to Shane "Douglas Crockford of SCSS" da Silva.

Add misspelled property/value linter

I just ran through some code I was reviewing and noticed someone had a property diplay: block;

I was wondering if you guys would find it useful to create a linter that would run through all known "properties/values that are words" and throw a warning if something the linter didn't know about was in place.

What do you guys think?

property_format_linter.rb:27: undefined (?...) sequence: / (RegexpError)

$ g ci
Running pre_commit checks
  Checking author_name........................OK
/Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/scss-lint-0.7.1/lib/scss_lint/linter/property_format_linter.rb:27: undefined (?...) sequence: / (RegexpError)
      ^\s*[^:]+(?<!\s):\s       # property name, colon not preceded by a space, one space
        (                       # followed by
          (?-mix:(\S+\s)*\S+);          # property and terminating semi-colon eg. a b c;
          |                     # or
          (((?-mix:(\S+\s)*\S+)\s)?\{)  # nested property, optional value, trailing curly
        )
    /
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/scss-lint-0.7.1/lib/scss_lint.rb:19
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/scss-lint-0.7.1/lib/scss_lint.rb:18:in `each'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/scss-lint-0.7.1/lib/scss_lint.rb:18
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/plugins/pre_commit/scss_lint.rb:8:in `run_check'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/git_hook.rb:74:in `run_and_filter_check'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/git_hook.rb:33:in `run'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/reporter.rb:14:in `with_status'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/git_hook.rb:32:in `run'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/git_hook.rb:24:in `each'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/git_hook.rb:24:in `run'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/utils.rb:11:in `run_hooks'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/utils.rb:11:in `each'
        from /Users/adam/.rvm/gems/ruby-1.9.3-p448/gems/overcommit-0.2.2/lib/overcommit/utils.rb:11:in `run_hooks'
        from .git/hooks/pre-commit:8

on the file:

@import 'mixins';
@import 'www/shared/global';

#feedback-modal {
  width: 528px;
  height: 500px;

  .modalCloseImg {
    background: image-url('common/modal-close.png') no-repeat top left;
    cursor: pointer;
    display: block;
    height: 25px;
    position: absolute;
    right: 16px;
    top: 10px;
    width: 25px;
    z-index: 10;
  }

  .simplemodal-data {
    @include border-radius(10px);
    @include box-shadow(0 0 5px 0 rgba(0,0,0,.5));
    background: #fff;
    color: #333;
    font-size: 12px;
    padding: 20px;
  }

  .simplemodal-wrap .feedback-form {
    padding: 80px 50px 50px;

    .listy {
      background: image-url('apartmentlist/feedback-listy.png') no-repeat top left;
      height: 86px;
      left: 15px;
      position: absolute;
      top: 25px;
      width: 121px;
    }

    .title {
      color: #333;
      font-family: 'HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', sans-serif;
      font-size: 25px;
      font-weight: 300;
      margin-bottom: 30px;
      margin-left: 100px;
    }

    .field {
      @include clearfix;
    }

    label {
      float: left;
      font-weight: bold;
      margin-right: 10px;
      margin-top: 10px;
      text-align: right;
      text-transform: uppercase;
      width: 85px;
    }

    .name,
    .email,
    textarea {
      @include contact-input(310px);
      float: left;
    }

    .error,
    .error_message {
      background: #fce6e5;
      border-color: #f99090;
    }

    textarea {
      height: 150px;
    }

    .error_message {
      @include border-radius(4px);
      display: none;
      font-size: 14px;
      margin-top: 5px;
      padding: 11px;
    }
    .submit {
      @include button;
      float: right;
      padding: 10px 15px;
    }
  }
}
#recaptcha_area {
  float: right;
}

scss-lint -i doesn't work with multiple linters

when running scss-lint app/assets/stylesheets/ -i declared_name_linter, sorted_properties_linter

this is the stack trace I get.

[lifeiscontent@lifeiscontent apartmentlist (feature/format-css)]$ scss-lint app/assets/stylesheets/ -i declared_name_linter, sorted_properties_linter
/Users/lifeiscontent/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/find.rb:38:in `block in find': No such file or directory (Errno::ENOENT)
    from /Users/lifeiscontent/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/find.rb:38:in `collect!'
    from /Users/lifeiscontent/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/find.rb:38:in `find'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/lib/scss_lint.rb:31:in `block in extract_files_from'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/lib/scss_lint.rb:30:in `each'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/lib/scss_lint.rb:30:in `extract_files_from'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/lib/scss_lint/cli.rb:68:in `find_files'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/lib/scss_lint/cli.rb:55:in `run'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/bin/scss-lint:7:in `block in <top (required)>'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/bin/scss-lint:5:in `tap'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.1/bin/scss-lint:5:in `<top (required)>'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/scss-lint:19:in `load'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/scss-lint:19:in `<main>'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/ruby_noexec_wrapper:14:in `eval'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/ruby_noexec_wrapper:14:in `<main>'

Does not handle string interpolation well

If I have a style that looks like:

#{$property}: $value;

I get the "Property values should always be on one line of the form..." warning.

Similarly for styles like:

margin-#{$side}: 10px;

1 line selector with 1 property

is there an option to use everything from property_format_linter

except having it error on a rule like this?

.proceed { text-align: right; }

False positives for Option HexFormat / Strings in Quotes

First things first: awesome tool! I just started using it in an existing project to highlight some code-smell and it helps a lot.

One small thing i found: it chokes on @each-statements with color-variables if they are not wrapped in quotes, e.g.

@each $item in
    item-blue,
    item-red {
    ...
}

I get:

items.scss:3 [W] Color blue should be written in hexadecimal form as #00f
items.scss:4 [W] Color red should be written in hexadecimal form as #f00

even though these strings are not even meant as color-declarations.

Wrapping those in quotes fixes those warnings:

@each $item in
    "item-blue",
    "item-red" {
    ...
}

After all, maybe it would be wise to always wrap strings in quotes in sass/compass (maybe this would make another nice option!) - nevertheless, wanted to report this :-)

invalid option: -c

Maybe I'm being silly but I've got scss-lint 0.12.1 and I'm trying to specify a config file but when I use either -c or --config as CLI flags I get an invalid option error. What could I be doing wrong?

Keyword arguments with hyphens incorrectly reported by `DeclaredNameLinter`

When passing keyword arguments to a function or mixin, e.g.

@include line-clamp($line-count: 3, $line-height: 1.5em);

...scss-lint will incorrectly report lints for each keyword argument.

This is caused by the Sass parser (as of 3.2.9) normalizing the keyword arguments to their underscore-ized form when building the parse tree.

There are two possible solutions:

  • Monkey-patch Sass::Script::Variable#underscored_name to return the original name.
    • Fixes the problem and is quick to implement, but will break Sass compiling (not a problem since scss-lint doesn't compile SCSS for any of its lints...yet)
    • Introduces another bug where if a user calls a function with two variables that are the same except they differ in hyphen and underscore, e.g. func($line-height: 1, $line_height: 1) the parser won't report an error. Probably ok, as this is an extreme edge case.
    • Still sucks since we're monkey-patching rather than contributing upstream
  • Contribute an upstream fix to sass to change the keywords attribute of Funcall and MixinNode nodes so that it isn't a hash of String => Sass::Script::Node, but something that preserves the original name of the variable, like Sass::Script::Variable => Sass::Script::Node.
    • More complex to implement, forces us to change dependency from official sass gem to fork until it is merged upstream (and there is a chance it may not be merged upstream).

Will investigate when more time permits.

Does not appear to work with ruby 1.8.7

asottile@asottile$ ruby --version
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

asottile@asottile$ scss-lint --help
/usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': /var/lib/gems/1.8/gems/scss-lint-0.8.0/lib/scss_lint/linter/single_line_per_selector_linter.rb:28: syntax error, unexpected '\n' (SyntaxError)
    from /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /var/lib/gems/1.8/gems/scss-lint-0.8.0/lib/scss_lint.rb:20
    from /var/lib/gems/1.8/gems/scss-lint-0.8.0/lib/scss_lint.rb:19:in `each'
    from /var/lib/gems/1.8/gems/scss-lint-0.8.0/lib/scss_lint.rb:19
    from /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /var/lib/gems/1.8/gems/scss-lint-0.8.0/bin/scss-lint:3
    from /usr/local/bin/scss-lint:19:in `load'
    from /usr/local/bin/scss-lint:19

Learn flexbox properties

Can you please add flex-direction, flex-wrap, flex-flow, order, flex-grow, flex-shrink, flex-basis, flex, justify-content, align-items, align-self, and align-content properties to KNOWN_PROPERTIES. All from properties from sass-flex-mixin repo, the useful sass flex mixin.

NoMethodError when running scss-lint

Hello! We have a rather large collection of Sass files, so I am very excited about getting some linting going on!

I've got my environment set up to satisfy the requirements in the README:

$ sass --version
Sass 3.3.0.rc.1 (Maptastic Maple)

$ ruby --version
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0]

However, my progress was quickly halted with this error.

$ scss-lint src/scss/
/Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter/shorthand.rb:36:in `check_script_string': undefined method `type' for 5px:Sass::Script::Value::Number (NoMethodError)
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter/shorthand.rb:14:in `visit_prop'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:37:in `visit'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:50:in `visit'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:57:in `block in visit_children'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:55:in `each'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:55:in `visit_children'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:39:in `visit'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:50:in `visit'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:57:in `block in visit_children'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:55:in `each'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:55:in `visit_children'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:39:in `visit'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:50:in `visit'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/linter.rb:14:in `run'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/runner.rb:39:in `block in find_lints'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/runner.rb:38:in `each'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/runner.rb:38:in `find_lints'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/runner.rb:27:in `block in run'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/runner.rb:26:in `each'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/runner.rb:26:in `run'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/lib/scss_lint/cli.rb:63:in `run'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/bin/scss-lint:7:in `block in <top (required)>'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/bin/scss-lint:5:in `tap'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/gems/scss-lint-0.11.1/bin/scss-lint:5:in `<top (required)>'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/bin/scss-lint:23:in `load'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/bin/scss-lint:23:in `<main>'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/bin/ruby_noexec_wrapper:14:in `eval'
    from /Users/dave/.rvm/gems/ruby-1.9.3-p392/bin/ruby_noexec_wrapper:14:in `<main>'

Here is the log from installing scss-lint:

$ gem install scss-lint
Fetching: colorize-0.5.8.gem (100%)
Successfully installed colorize-0.5.8
Fetching: rb-fsevent-0.9.3.gem (100%)
Successfully installed rb-fsevent-0.9.3
Fetching: rb-inotify-0.9.2.gem (100%)
Successfully installed rb-inotify-0.9.2
Fetching: rb-kqueue-0.2.0.gem (100%)
Successfully installed rb-kqueue-0.2.0
Fetching: listen-1.1.6.gem (100%)
Successfully installed listen-1.1.6
Fetching: sass-3.3.0.rc.1.gem (100%)
Successfully installed sass-3.3.0.rc.1
Fetching: scss-lint-0.11.1.gem (100%)
Successfully installed scss-lint-0.11.1
Installing ri documentation for colorize-0.5.8
unable to convert "\xCA" from ASCII-8BIT to UTF-8 for bin/fsevent_watch, skipping
Installing ri documentation for rb-fsevent-0.9.3
Installing ri documentation for rb-inotify-0.9.2
Installing ri documentation for rb-kqueue-0.2.0
Installing ri documentation for listen-1.1.6
Installing ri documentation for sass-3.3.0.rc.1
Installing ri documentation for scss-lint-0.11.1
7 gems installed

Thanks for any help or advice!

Scss-lint 0.7.0 crashes on @media directives

OSX: 10.8.3

[lifeiscontent@lifeiscontent apartmentlist (dev)]$ scss-lint app/assets/stylesheets/
/Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/media_node.rb:38:in `value': NotImplementedError (NotImplementedError)
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/sass/tree.rb:55:in `children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `block in visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:113:in `visit_media'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:15:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `map'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `block in visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:88:in `visit_rule'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:15:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `map'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `block in visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:88:in `visit_rule'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:15:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `map'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `block in visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:88:in `visit_rule'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:37:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:15:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `map'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:53:in `visit_children'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/base.rb:39:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:15:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/visitors/set_options.rb:5:in `visit'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/tree/node.rb:69:in `options='
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/engine.rb:348:in `_to_tree'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/sass-3.2.9/lib/sass/engine.rb:274:in `to_tree'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/scss_lint/engine.rb:20:in `initialize'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:38:in `new'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:38:in `find_lints'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:29:in `block in run'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:28:in `each'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:28:in `run'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/lib/scss_lint/cli.rb:55:in `run'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/bin/scss-lint:7:in `block in <top (required)>'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/bin/scss-lint:5:in `tap'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/gems/scss-lint-0.7.0/bin/scss-lint:5:in `<top (required)>'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/scss-lint:19:in `load'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/scss-lint:19:in `<main>'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/ruby_noexec_wrapper:14:in `eval'
    from /Users/lifeiscontent/.rvm/gems/ruby-1.9.3-p286@apartmentlist/bin/ruby_noexec_wrapper:14:in `<main>'

No recursive scanning

The CLI doesn't provide recursive scanning and crashes brutally if a directory is passed to the script.

RegexpError in property_format_linter.rb under Ruby 1.8.7

Not sure exactly where in this maze the error lies, but this is causing the binary to fail to boot in stock OS X.

>> scss-lint --version
/Library/Ruby/Gems/1.8/gems/scss-lint-0.7.1/lib/scss_lint/linter/property_format_linter.rb:27: undefined (?...) sequence: / (RegexpError)
      ^\s*[^:]+(?<!\s):\s       # property name, colon not preceded by a space, one space
        (                       # followed by
          (?-mix:(\S+\s)*\S+);          # property and terminating semi-colon eg. a b c;
          |                     # or
          (((?-mix:(\S+\s)*\S+)\s)?\{)  # nested property, optional value, trailing curly
        )
    /

should not alphabetically sort -#{vendor}- properties.

I'm not sure about you guys,

but I feel like sorting -ms-,-moz-, is a good idea, can you put in a clause to the linter that doesn't sort these properties?

I'd just do if key starts with - ignore it but maybe you'll think of something better 👍

There's no option to exclude some files

It would be useful to have an option like --exclude <filename> to exclude some files.
For example in our source dir I have _fontawesome.scss that I don't care to analyze and I'd like to exclude.

scss-lint 0.6 blows up in our environment (had to roll back to 0.52

wrong number of arguments(1 for 0)
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/script/list.rb:44:in to_s' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/script/list.rb:44:inblock in to_s'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/script/list.rb:44:in map' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/script/list.rb:44:into_s'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/linter/shorthand_linter.rb:35:in check_valid_shorthand_value' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/linter/shorthand_linter.rb:12:inblock in run'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in block (2 levels) in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:inblock (2 levels) in each'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in block (2 levels) in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:inblock (2 levels) in each'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in block (2 levels) in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:150:ineach'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in block in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:ineach'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:inblock in each'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:ineach'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in block in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:ineach'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:inblock in each'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:ineach'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in block in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:ineach'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/sass-3.2.7/lib/sass/tree/node.rb:151:in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/linter/shorthand_linter.rb:10:inrun'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/runner.rb:35:in block in find_lints' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/runner.rb:34:ineach'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/runner.rb:34:in find_lints' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/runner.rb:27:inblock in run'
/home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/runner.rb:26:in each' /home/kato/workspace/wize/vendor/bundle/ruby/1.9.1/gems/scss-lint-0.6/lib/scss_lint/runner.rb:26:inrun'
/home/kato/workspace/wize/lib/tasks/scss_lint.rake:13:in `block (2 levels) in <top (required)>'
Tasks: TOP => scss:lint

Lint report hex error in selector

Lint is reporting a hex error in a selector. E.g.:

#defaultPaymentTable td:first-child {
  font-size: 16px !important;
}
$ scss-lint file.scss
... - Hexadecimal color codes should be lowercase and in 3-digit form where possible

Efficient CSS

I like this project! Thank you for working on it.

I just wish it could check for inefficient CSS.

By that I mean:

  1. Overuse of child selectors

    .parent > .child > .another-child

  2. Use of too many selectors

We need to check if they follow this rule: "Limit depth of applicability by using fewer selectors, avoiding ID selectors and relying less on html structure"

Those are more important than fixing typos and missing spaces in my opinion. I am just suggesting to make this project more sensible. I may work on it when I find time.

Compress CSS Hex values issue

The compress CSS hex values linter says I should compress this:

body { color: #3488C9; }

and

body { color: #E8E4E4; }

Enforce use of hyphens instead of underscores in variable and mix-in names

I'm currently sweeping through our codebase making things consistent (ie. with class/ID names, with Compass mix-in and variable names, and with CSS property names themselves; they all use hyphens instead of underscores).

It would be nice if we could have scss-lint enforce this moving forward.

undefined method `production' for Sass::Script::CssParser:Class

This is what I get when install scss-lint via bundler as I need to make sure it is included on a project.

sass-3.2.10/lib/sass/script/css_parser.rb:17:in `<class:CssParser>': undefined method `production' for Sass::Script::CssParser:Class (NoMethodError

undefined method `type' for 0:Sass::Script::Value::Number

I received this error when trying to run scss-lint from a fresh install:

SCSSLint::Linter::Shorthand raised unexpected error: 'undefined method `type' for 0:Sass::Script::Value::Number'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter/shorthand.rb:38:in `check_script_string'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter/shorthand.rb:16:in `visit_prop'
/var/lib/gems/1.9.1/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:37:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:61:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:68:in `block in visit_children'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `each'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `visit_children'
/var/lib/gems/1.9.1/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:39:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:61:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:68:in `block in visit_children'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `each'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `visit_children'
/var/lib/gems/1.9.1/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:39:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:61:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:68:in `block in visit_children'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `each'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `visit_children'
/var/lib/gems/1.9.1/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:39:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:61:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:68:in `block in visit_children'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `each'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:66:in `visit_children'
/var/lib/gems/1.9.1/gems/sass-3.3.0.rc.1/lib/sass/tree/visitors/base.rb:39:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:61:in `visit'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/linter.rb:14:in `run'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/runner.rb:49:in `block in find_lints'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/runner.rb:47:in `each'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/runner.rb:47:in `find_lints'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/runner.rb:30:in `block in run'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/runner.rb:29:in `each'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/runner.rb:29:in `run'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/lib/scss_lint/cli.rb:65:in `run'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/bin/scss-lint:7:in `block in <top (required)>'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/bin/scss-lint:5:in `tap'
/var/lib/gems/1.9.1/gems/scss-lint-0.12.0/bin/scss-lint:5:in `<top (required)>'
/usr/local/bin/scss-lint:23:in `load'
/usr/local/bin/scss-lint:23:in `<main>'

This was on Ubuntu 13.04 using sudo gem install scss-lint

Error when trying to run scss-lint

When I navigate to my scss files via the terminal and run
scss-lint . I get this error, and I don't know what it is going on about, maybe something to do with the scss parser?

scss-lint .
/usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/media_node.rb:38:in `value': NotImplementedError (NotImplementedError)
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/sass/tree.rb:55:in `children'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `visit_children'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:37:in `block in visit'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/set_options.rb:113:in `visit_media'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:37:in `visit'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/set_options.rb:15:in `visit'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `map'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:53:in `visit_children'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/base.rb:39:in `visit'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/set_options.rb:15:in `visit'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/visitors/set_options.rb:5:in `visit'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/tree/node.rb:69:in `options='
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/engine.rb:348:in `_to_tree'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/sass-3.2.12/lib/sass/engine.rb:274:in `to_tree'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/scss_lint/engine.rb:20:in `initialize'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:38:in `new'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:38:in `find_lints'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:29:in `block in run'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:28:in `each'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/scss_lint/runner.rb:28:in `run'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/lib/scss_lint/cli.rb:55:in `run'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/bin/scss-lint:7:in `block in <top (required)>'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/bin/scss-lint:5:in `tap'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.7.0/bin/scss-lint:5:in `<top (required)>'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/bin/scss-lint:23:in `load'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/bin/scss-lint:23:in `<main>'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/bin/ruby_executable_hooks:15:in `eval'
    from /usr/local/rvm/gems/ruby-2.0.0-p247/bin/ruby_executable_hooks:15:in `<main>'
lee@lee-W150HNM-W170HN ~/Code/mobi_fit/app/assets/stylesheets $ 

Lint not detected for shorthand properties zero values

For example, scss-lint does not report a lint for the 0em at the end of the padding property shorthand.

p {
  padding: 1.3em 1em 0em;
}

This is due to the regex used to detect these cases. It needs to be modified to support detecting more than one occurrence of a value on a line.

It also does not work for arguments of mixins or functions, e.g.

@include my-mixin(0em);

Invalid byte sequence in US-ASCII error

I'm getting this error when trying to lint some of my scss files

invalid byte sequence in US-ASCII
/Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/engine.rb:21:in split' /Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/engine.rb:21:ininitialize'
/Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/runner.rb:31:in new' /Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/runner.rb:31:infind_lints'
/Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/runner.rb:20:in block in run' /Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/runner.rb:19:ineach'
/Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/runner.rb:19:in run' /Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/lib/scss_lint/cli.rb:90:inrun'
/Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/bin/scss-lint:7:in block in <top (required)>' /Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/bin/scss-lint:5:intap'
/Users/cerouno/.rvm/gems/ruby-2.0.0-p247/gems/scss-lint-0.14.0/bin/scss-lint:5:in <top (required)>' /Users/cerouno/.rvm/rubies/ruby-2.0.0-p247/bin/scss-lint:23:inload'
/Users/cerouno/.rvm/rubies/ruby-2.0.0-p247/bin/scss-lint:23:in `

'
Report this bug at https://github.com/causes/scss-lint/issues

Any idea?

Best regards.

No license

Looks like we forgot to specify a license, both in the gemspec and the repo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.