Skip to content

linting your pug templates in vue single file components

License

Notifications You must be signed in to change notification settings

lineto/eslint-plugin-vue-pug

 
 

Repository files navigation

eslint-plugin-vue-pug

Extends eslint-plugin-vue to support pug templates.

Installation

npm install --save-dev eslint@8 eslint-plugin-vue eslint-plugin-vue-pug

Usage

Most eslint-plugin-vue rules work out of the box with just adding this plugin in your eslint config:

module.exports = {
  extends: [
    'plugin:vue/vue3-recommended',
    'plugin:vue-pug/vue3-recommended'
  ]
}

Limitations

  • pug-lexer seems to convert windows-style CRLF line endings to LF line endings, which may break token position and will give you errors. Make sure to only use LF line endings.

Supported Syntax

This plugin only lints pug syntax that directly corresponds to html syntax. Pug syntax that is not supported includes mixins, js code, loops, if/else, case, include/extends. The linter will just skip those features, which means that tags inside mixins will not be linted. The rule no-pug-control-flow will help you to avoid unsupported pug syntax.

Open Questions

Comment Directive

Do we want own docs for that? Also, pug has no inline comments.

#id and .class shorthands

Shorthands get dropped from attributes list to not affect attribute order. We need to add separate linter rules for those.

  • no-useless-template-attributes checks for class on template, we need to also check shorthands.
  • no-restricted-class needs special handling

brace style

Existing rule fails at fixing and does not replace " quotes with `.

parsing commas in dynamic attribute names

pug splits up attribute names like :[[a,b,][1]]

spaces added by fix

first-attribute-linebreak adds a space between tag( and attr="" in certain scenarios.

attribute separators

Things like max-attributes-per-line would need to include the , in the attribute range for some fixes to work correctly, but this would break attribute-order.

HTML tokens

there are some rules relying on HTML* tokens, like no-multi-spaces.

Splitting low level mustache tokens

template attributes

having both lang and src attributes on template, what does that even do?

HTML rules

Rules for HTML don't apply to pug, but do not seem to interfere with pug templates since they check HTML* tokens, which we don't emit. Should we still disable those rules or leave them on?

About

linting your pug templates in vue single file components

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%