Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
536 lines (470 sloc) 10.6 KB

Stylus Linter

Build Status NPM version NPM Downloads



As part of your project

npm i stlint -D

As a cli tool:

npm install stlint -g

Example cli Usage:

npx stlint Run stlint on cwd

stlint Run stlint on cwd as global

stlint path/to/filename.styl Run stlint on a file

stlint path/to/dir --watch Watch dir, run stlint on file change

stlint --help Get list of commands

stlint --version Get version number

stlint --config path/to/config/.configrc Run stlint with custom config settings

stlint styl/ --watch -c path/to/config/.configrc Watch dir, use custom config


-h or --help Display list of commands

-w or --watch Watch file or directory and run lint on change

-c or --config Pass in location of custom config file

-v or --version Display current version

-g or --grep Only run rules matching this string or regexp

-f or --fix Try fix some issues

-i or --info Show info about version and config (can be used with --grep for filter rules)

-r or --reporter Reporter "raw", "json" or "silent"

All another options from [config](#Config file)

Non CLI Usage

const StylusLinter = require('stlint').StylusLinter;
StylusLinter('path/to/stylus/', {
  watch: true

or check only one file or text

const Linter = require('stlint').Linter;
const linter = new Linter({

// if you want check content
linter.lint('./test.styl', 'content');

// if you want check file

// and display errors.

Config file

Create .stlintrc file in project root

  "reporter": "raw",
  "watch": false,
  "extends": ["stlint-v4fire", "./test/.myfileconfig.json"],
  "extraRules": "./my-rules/",
  "rules": {
    "color": false,
    "colons": ["always"],
    "depthControl": {
      "indentPref": 4
  "path": "./src",
  "excludes": ["node_modules/"],
  "stylusParserOptions": {},
  "reportOptions": {
    "columnSplitter": " | ",
    "maxWidth": 70,
    "minWidth": 70,
    "trancate": false

As Part of Your Workflow

Stlint integrations with IDEs are available.

Ignore errors

sometimes you want to ignore the error for this there are two directives:

  • @stlint-ignore - ignores only one line after it
  • @stlint-disable @stlint-enable - ignore block (@stlint-enable is optional)

For example, in the following code, some errors will be ignored.

$p = {
  a: #CCC
  // @stlint-ignore  
  b: #ccc // need use uppercase notation will be ignored
  c: 10px
  margin-top 20px
  // @stlint-disable
  padding-top 20px  // need use mixin will be ignored
  color #ccc        // need use uppercase notation and use variable will be ignored
  // @stlint-enable
  background-color #ddd

Respectively, in order not to display errors of the entire file, it is enough to add an @stlint-disable directive to its beginning

// @stlint-disable - all errors below will be ignored
$p = {
  a: #CCC
  b: #ccc
  c: 10px
  margin-top 20px
  padding-top 20px
  color #ccc 
  background-color #ddd



Use/Do not use colons after property

Default value



Process all color values. Allow or deny use it not in variable and use uppercase or lowercase statements For example this code has error - because we use only color in uppercase

  color #ccc

If allowOnlyInVar === true code above also has error - no use color without variable

Fixed code

$color = #CCC
  color $color

Default value

  "conf": "uppercase",
  "enabled": true,
  "allowOnlyInVar": true,
  "allowShortcut": true,
  "denyRGB": true


Allow or deny commas in object hash

Default value



Control depth spaces or tab

Default value

  "indentPref": "tab"


Check if document has several empty lines

Default value



Check for leading 0 on numbers ( 0.5 )

Default value



check for mixed spaces and tabs

Default value

  "indentPref": "tab"


Check that $ is used when declaring vars

Default value

  "conf": "always",
  "prefix": "$",
  "allowConst": true


Check that quote style is consistent with config

Default value



Check that selector properties are sorted accordingly

Default value



Rule for checking properties order. Can use alphabetical order or order from grouped array

Default value

  "conf": "grouped",
  "startGroupChecking": 6,
  "order": [


Allo or deny some mixin instead of unit statement

Default value

  "conf": "always",
  "mixin": "basis",
  "unitType": "px",
  "allowOneUnit": false


Self rules

You can create folder and use it for extra rules

  "extraRules": "/Users/v-chupurnov/WebstormProjects/test/rules/"

In this folder you can create native JavaScript files

const Rgb = require('stlint').ast.RGB;

function TestRule() {
	nodesFilter = ['rgb']; // can be one of

	 * Check the AST nodes
	 * @param node
	this.checkNode = (node) => {
		if (node instanceof Rgb) {
			console.log(this.state.conf); // test111
			console.log(this.state.someExtraVariable); // 112
			// this.msg('Test error on test node', node.lineno, node.column, node.line.length);

	 * Check every line
	 * @param line
	this.checkLine = (line) => {
		if (line.lineno === 1) {
			// this.msg('Test error on test line', line.lineno, 1, line.line.length);

module.exports.TestRule = TestRule;

And you need add this rule in your config

  "extraRules": "/Users/v-chupurnov/WebstormProjects/test/rules/",
  "rules": {
    "testRule": {
      "conf": "test111",
      "someExtraVariable": 112,
      "enabled": true


The MIT License.

You can’t perform that action at this time.