The Wayback Machine - https://web.archive.org/web/20241208012524/https://github.com/stylelint/stylelint/issues/5694
Skip to content

Add end positions to warnings #5694

Closed
Closed

Description

Avoid errors:

  • at-rule-no-unknown
  • block-no-empty
  • color-no-invalid-hex
  • comment-no-empty
  • custom-property-no-missing-var-function
  • declaration-block-no-duplicate-custom-properties
  • declaration-block-no-duplicate-properties
  • declaration-block-no-shorthand-property-overrides
  • font-family-no-duplicate-names
  • font-family-no-missing-generic-family-keyword
  • function-calc-no-unspaced-operator
  • function-linear-gradient-no-nonstandard-direction
  • function-no-unknown
  • keyframe-declaration-no-important
  • media-feature-name-no-unknown
  • named-grid-areas-no-invalid
  • no-descending-specificity
  • no-duplicate-at-import-rules
  • no-duplicate-selectors
  • no-empty-source
  • no-invalid-double-slash-comments
  • no-invalid-position-at-import-rule
  • property-no-unknown
  • selector-pseudo-class-no-unknown
  • selector-pseudo-element-no-unknown
  • selector-type-no-unknown
  • string-no-newline
  • unit-no-unknown

Enforce conventions:

  • alpha-value-notation
  • at-rule-allowed-list
  • at-rule-disallowed-list
  • at-rule-no-vendor-prefix
  • at-rule-property-required-list
  • color-function-notation
  • color-hex-alpha
  • color-hex-length
  • color-named
  • color-no-hex
  • comment-pattern
  • comment-word-disallowed-list
  • custom-media-pattern
  • custom-property-pattern
  • declaration-block-no-redundant-longhand-properties
  • declaration-block-single-line-max-declarations
  • declaration-no-important
  • declaration-property-unit-allowed-list
  • declaration-property-unit-disallowed-list
  • declaration-property-value-allowed-list
  • declaration-property-value-disallowed-list
  • font-family-name-quotes
  • font-weight-notation
  • function-allowed-list
  • function-disallowed-list
  • function-url-no-scheme-relative
  • function-url-quotes
  • function-url-scheme-allowed-list
  • function-url-scheme-disallowed-list
  • hue-degree-notation
  • keyframes-name-pattern
  • length-zero-no-unit
  • max-nesting-depth
  • media-feature-name-allowed-list
  • media-feature-name-disallowed-list
  • media-feature-name-no-vendor-prefix
  • media-feature-name-value-allowed-list
  • no-unknown-animations
  • number-max-precision
  • property-allowed-list
  • property-disallowed-list
  • property-no-vendor-prefix
  • rule-selector-property-disallowed-list
  • selector-attribute-name-disallowed-list
  • selector-attribute-operator-allowed-list
  • selector-attribute-operator-disallowed-list
  • selector-attribute-quotes
  • selector-class-pattern
  • selector-combinator-allowed-list
  • selector-combinator-disallowed-list
  • selector-disallowed-list
  • selector-id-pattern
  • selector-max-attribute
  • selector-max-class
  • selector-max-combinators
  • selector-max-compound-selectors
  • selector-max-id
  • selector-max-pseudo-class
  • selector-max-specificity
  • selector-max-type
  • selector-max-universal
  • selector-nested-pattern
  • selector-no-qualifying-type
  • selector-no-vendor-prefix
  • selector-not-notation
  • selector-pseudo-class-allowed-list
  • selector-pseudo-class-disallowed-list
  • selector-pseudo-element-allowed-list
  • selector-pseudo-element-colon-notation
  • selector-pseudo-element-disallowed-list
  • shorthand-property-no-redundant-values
  • time-min-milliseconds
  • unit-allowed-list
  • unit-disallowed-list
  • value-no-vendor-prefix

What steps are needed to reproduce the bug?

Run Stylelint! It doesn't provide enough information back to plugins in order for them to effectively show warnings in editors:

[Debug - 10:13:21 p.m.] [language-server] Lint run complete | uri: "file:///c%3A/Users/SOMEPLACEONMYMACHINE/Icon/icon.scss" results: {"diagnostics":[{"range":{"start":{"line":36,"character":18},"end":{"line":36,"character":18}},"message":"Expected list.index instead of index (scss/no-global-function-names)","severity":1,"code":"scss/no-global-function-names","source":"Stylelint"},{"range":{"start":{"line":19,"character":16},"end":{"line":19,"character":16}},"message":"Unexpected named color \"pink\" (color-named)","severity":1,"code":"color-named","source":"Stylelint","codeDescription":{"href":"https://stylelint.io/user-guide/rules/color-named"}},{"range":{"start":{"line":72,"character":0},"end":{"line":72,"character":0}},"message":"Expected selector \"svg\" to come before selector \".atom-icon svg\" (no-descending-specificity)","severity":1,"code":"no-descending-specificity","source":"Stylelint","codeDescription":{"href":"https://stylelint.io/user-guide/rules/no-descending-specificity"}},{"range":{"start":{"line":72,"character":0},"end":{"line":72,"character":0}},"message":"Expected selector \"svg\" to come before selector \".atom-icon.rounded svg\" (no-descending-specificity)","severity":1,"code":"no-descending-specificity","source":"Stylelint","codeDescription":{"href":"https://stylelint.io/user-guide/rules/no-descending-specificity"}}]}

Please note in the debug log above, the start and end line characters are the same, despite this being an entire word causing the error. This means errors in editors can only show a single character error underline:

image

Which in turn means an editor cannot show a dialog with error information. See discussion here from the dev over at vscode-stylelint.

What Stylelint configuration is needed to reproduce the bug?

{
    "plugins": [
        "stylelint-order",
        "stylelint-scss",
        "stylelint-prettier"
    ],
    "rules": {
        "prettier/prettier": true,
        "order/properties-alphabetical-order": true,
        "at-rule-no-unknown": null,
        "scss/at-rule-no-unknown": null,
        "declaration-bang-space-before": "always",
        "declaration-bang-space-after": "never",
        "color-named": "never",
        "color-no-hex": [
            true,
            {
                "message": "Please use a color variable"
            }
        ],
        "declaration-block-no-duplicate-properties": true,
        "rule-empty-line-before": [
            "always-multi-line",
            {
                "except": [
                    "after-single-line-comment",
                    "inside-block-and-after-rule",
                    "first-nested"
                ],
                "ignore": [
                    "after-comment",
                    "inside-block"
                ]
            }
        ],
        "color-hex-length": "short",
        "color-hex-case": "lower",
        "no-missing-end-of-source-newline": true,
        "block-no-empty": true,
        "color-no-invalid-hex": true,
        "declaration-no-important": true,
        "number-leading-zero": "always",
        "no-duplicate-selectors": true,
        "max-nesting-depth": 6,
        "unit-allowed-list": [
            [
                "%",
                "em",
                "vh",
                "vw",
                "s",
                "ms",
                "deg",
                "units.px-to-rem"
            ],
            {
                "message": "Don't use px values (spacing() / px-to-rem()) function"
            }
        ],
        "selector-pseudo-element-colon-notation": "double",
        "selector-no-qualifying-type": true,
        "selector-class-pattern": "^([a-z]+\\-?[a-z]+?)*",
        "shorthand-property-no-redundant-values": true,
        "declaration-block-semicolon-newline-after": "always-multi-line",
        "selector-list-comma-newline-after": "always",
        "function-comma-space-after": "always",
        "declaration-colon-space-after": "always",
        "block-opening-brace-newline-before": "always-single-line",
        "block-opening-brace-space-before": "always",
        "function-parentheses-space-inside": "never",
        "selector-attribute-quotes": "always",
        "declaration-block-trailing-semicolon": "always",
        "no-eol-whitespace": true,
        "number-no-trailing-zeros": true,
        "function-url-quotes": "always",
        "property-no-vendor-prefix": true,
        "selector-no-vendor-prefix": true,
        "media-feature-name-no-vendor-prefix": true,
        "at-rule-no-vendor-prefix": true,
        "value-no-vendor-prefix": true,
        "length-zero-no-unit": true,
        "scss/at-import-no-partial-leading-underscore": true,
        "scss/selector-no-redundant-nesting-selector": true,
        "scss/dollar-variable-pattern": [
            "^([a-z]+\\-?)+?$",
            {
                "message": "Please use lowercase, dashcase for var names"
            }
        ],
        "scss/at-mixin-pattern": [
            "^([a-z]+\\-?[a-z]+?)*$",
            {
                "message": "Please use hyhenated_lowercase for mixin name"
            }
        ],
        "scss/at-function-pattern": [
            "^([a-z]+\\-?[a-z]+?)*",
            {
                "message": "Please use hyhenated_lowercase for function name"
            }
        ],
        "scss/percent-placeholder-pattern": [
            "^([a-z]+\\-?[a-z]+?)*",
            {
                "message": "Please use hyhenated_lowercase for placeholder name"
            }
        ],
        "comment-no-empty": true,
        "number-max-precision": 3,
        "function-comma-newline-after": "never-multi-line",
        "function-comma-space-before": "never",
        "function-linear-gradient-no-nonstandard-direction": true,
        "function-calc-no-unspaced-operator": true,
        "value-list-comma-newline-after": "always-multi-line",
        "function-comma-newline-before": "never-multi-line",
        "value-list-comma-newline-before": "never-multi-line",
        "value-list-comma-space-after": "always-single-line",
        "value-list-comma-space-before": "never-single-line",
        "declaration-colon-newline-after": null,
        "declaration-colon-space-before": "never",
        "declaration-block-semicolon-newline-before": "never-multi-line",
        "declaration-block-semicolon-space-after": "always-single-line",
        "declaration-block-semicolon-space-before": "never",
        "block-closing-brace-newline-after": "always",
        "block-closing-brace-newline-before": "always-multi-line",
        "block-opening-brace-newline-after": "always",
        "block-opening-brace-space-after": "always-single-line",
        "selector-combinator-space-after": "always",
        "selector-combinator-space-before": "always",
        "selector-list-comma-newline-before": "never-multi-line",
        "selector-list-comma-space-after": "always-single-line",
        "selector-list-comma-space-before": "never",
        "media-feature-colon-space-after": "always",
        "media-feature-colon-space-before": "never",
        "media-feature-range-operator-space-after": "always",
        "media-feature-range-operator-space-before": "never",
        "media-query-list-comma-newline-after": "always-multi-line",
        "media-query-list-comma-newline-before": "never-multi-line",
        "media-query-list-comma-space-after": "always-single-line",
        "media-query-list-comma-space-before": "never",
        "comment-empty-line-before": [
            "always",
            {
                "ignore": [
                    "stylelint-commands"
                ]
            }
        ],
        "declaration-block-no-redundant-longhand-properties": true,
        "declaration-block-no-shorthand-property-overrides": true,
        "font-family-no-duplicate-names": true,
        "keyframe-declaration-no-important": true,
        "media-feature-name-no-unknown": true,
        "no-empty-source": true,
        "no-extra-semicolons": true,
        "no-invalid-double-slash-comments": true,
        "property-no-unknown": true,
        "selector-pseudo-class-no-unknown": true,
        "selector-pseudo-element-no-unknown": true,
        "selector-type-no-unknown": true,
        "string-no-newline": true
    }
}

How did you run Stylelint?

vscode-stylelint & CLI

Which version of Stylelint are you using?

13.12.0 & 14.0.1

What did you expect to happen?

Full start and end word & line information should be passed from stylelint AST parser and back to consuming resources

What actually happened?

Nothing, nada, no dice!

Does the bug relate to non-standard syntax?

SCSS (although I assume all supported syntax)

Proposal to fix the bug

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions