Add stylelint integration#239
Conversation
ntwb
left a comment
There was a problem hiding this comment.
Awesome @westonruter, I've added numerous inline comments 👍
|
|
||
| # Install stylelint | ||
| if [ -n "$STYLELINT_CONFIG" ] && [ -e "$STYLELINT_CONFIG" ] && [ ! -e "$(npm bin)/stylelint" ] && check_should_execute 'stylelint'; then | ||
| echo "Installing ESLint" |
| # Install stylelint | ||
| if [ -n "$STYLELINT_CONFIG" ] && [ -e "$STYLELINT_CONFIG" ] && [ ! -e "$(npm bin)/stylelint" ] && check_should_execute 'stylelint'; then | ||
| echo "Installing ESLint" | ||
| if ! npm install -g eslint 2>/dev/null; then |
There was a problem hiding this comment.
Should be if ! npm install -g stylelint 2>/dev/null; then
| if [ -z "$STYLELINT_CONFIG" ]; then | ||
| STYLELINT_CONFIG="$( upsearch stylelint.config.js )" | ||
| fi | ||
|
|
There was a problem hiding this comment.
stylelint supports a few more config files, not sure if you want to include all possible combinations here
Via https://stylelint.io/user-guide/configuration/
The.stylelintrcfile (without extension) can be in JSON or YAML format. Alternately, you can add a filename extension to designate JSON, YAML, or JS format:.stylelintrc.json,.stylelintrc.yaml,.stylelintrc.yml,.stylelintrc.js. You may want to use an extension so that your text editor can better interpret the file, and help with syntax checking and highlighting.
| cat "$TEMP_DIRECTORY/paths-scope" | grep -E '\.php(:|$)' | cat - > "$TEMP_DIRECTORY/paths-scope-php" | ||
| cat "$TEMP_DIRECTORY/paths-scope" | grep -E '\.jsx?(:|$)' | cat - > "$TEMP_DIRECTORY/paths-scope-js" | ||
| cat "$TEMP_DIRECTORY/paths-scope" | grep -E '\.(css|scss)(:|$)' | cat - > "$TEMP_DIRECTORY/paths-scope-scss" | ||
| cat "$TEMP_DIRECTORY/paths-scope" | grep -E '\.(css|scss)(:|$)' | cat - > "$TEMP_DIRECTORY/paths-scope-css" |
There was a problem hiding this comment.
Let's drop scss from the above and only go with css initially.
The stylelint-config-wordpress configuration includes two stylelint shared configs, one for CSS and one for SCSS, so let's get CSS up and running and follow up with with SCSS in another PR
|
|
||
| # Make sure linter configs get copied linting directory since upsearch is relative. | ||
| for linter_file in .jshintrc .jshintignore .jscsrc .jscs.json .eslintignore .eslintrc phpcs.ruleset.xml ruleset.xml; do | ||
| for linter_file in .jshintrc .jshintignore .jscsrc .jscs.json .eslintignore .eslintrc .stylelintrc stylelint.config.js phpcs.ruleset.xml ruleset.xml; do |
There was a problem hiding this comment.
See also above comment on adding all possibilities of valid stylelint configuration file names.
| echo "## stylelint" | ||
| cd "$LINTING_DIRECTORY" | ||
| # TODO: --format=compact is not right. | ||
| if ! cat "$TEMP_DIRECTORY/paths-scope-css" | remove_diff_range | xargs "$(npm bin)/stylelint" --format=compact --config="$STYLELINT_CONFIG" > "$TEMP_DIRECTORY/stylelint-report"; then |
There was a problem hiding this comment.
Rather than --format=compact, it should be --custom-formatter stylelint-formatter-compact
There was a problem hiding this comment.
It seems that it actually needs to be --custom-formatter node_modules/stylelint-formatter-compact
| cat "$TEMP_DIRECTORY/paths-scope" | ||
|
|
||
| check_execute_bit | ||
| lint_css_files |
There was a problem hiding this comment.
As noted above, in a follow up PR we can add lint_scss_files
| ``` | ||
|
|
||
| For ESLint, you'll also likely want to make `eslint` as a dev dependency for your NPM package: | ||
| For ESLint and stylelint, you'll also likely want to make then dev dependencies for your NPM package: |
|
Example working integration: xwp/wp-core-media-widgets#183 |
| ( | ||
| echo "## stylelint" | ||
| cd "$LINTING_DIRECTORY" | ||
| if ! cat "$TEMP_DIRECTORY/paths-scope-css" | remove_diff_range | xargs "$(npm bin)/stylelint" --custom-formatter=node_modules/stylelint-formatter-compact --config="$STYLELINT_CONFIG" > "$TEMP_DIRECTORY/stylelint-report"; then |
There was a problem hiding this comment.
Not sure about the node_modules/stylelint-formatter-compact part. What if stylelint-formatter-compact is installed globally?
There was a problem hiding this comment.
Swap the = for a space , i.e: --custom-formatter node_modules/stylelint-formatter-compact
There was a problem hiding this comment.
It doesn't make a difference. Both --custom-formatter node_modules/stylelint-formatter-compact and --custom-formatter=node_modules/stylelint-formatter-compact have the same result.
Also, both --custom-formatter stylelint-formatter-compact and --custom-formatter=stylelint-formatter-compact fail with: “Error: Cannot find module”.
| indent_style = tab | ||
|
|
||
| [{package.json,*.yml}] | ||
| [{*.json,*.yml,.stylelintrc,.jshintrc,.eslintrc,.jscsrc}] |
| ( | ||
| echo "## stylelint" | ||
| cd "$LINTING_DIRECTORY" | ||
| if ! cat "$TEMP_DIRECTORY/paths-scope-css" | remove_diff_range | xargs "$(npm bin)/stylelint" --custom-formatter=node_modules/stylelint-formatter-compact --config="$STYLELINT_CONFIG" > "$TEMP_DIRECTORY/stylelint-report"; then |
There was a problem hiding this comment.
Swap the = for a space , i.e: --custom-formatter node_modules/stylelint-formatter-compact
| indent_style = tab | ||
|
|
||
| [{package.json,*.yml}] | ||
| [{*.json,*.yml,*.yaml,.stylelintrc,.jshintrc,.eslintrc,.jscsrc}] |
There was a problem hiding this comment.
This change is no longer needed, all .json files should now use tabs for indentation
…onfigs" This partially reverts commit b0eff2f.
Fixes #47