【问题标题】:Have sass-lint ignore a certain line?sass-lint 是否忽略了某行?
【发布时间】:2016-05-10 05:35:08
【问题描述】:

我在 Gulp 中使用 sass-lint。如何从 lint 控制台输出禁用我的 sass 中特定样式的警告?

我发现了一个类似的问题,但我使用的是 sass-lint,而不是 scss-lint: Having scss-lint ignore a particular line

这是我正在使用的:https://www.npmjs.com/package/gulp-sass-lint

我尝试了一些基于 scss-lint 项目的变体:

// scss-lint:disable ImportantRule
// sass-lint:disable ImportantRule
// sass-lint:disable no-important

为了清楚起见,我想在我的 SASS 中禁用特定样式的警告,而不是全局。当触发警告的事情是故意的时,我会使用它。例如,我可能会设置多种背景样式,以便可以作为旧浏览器的后备样式。但目前这正在触发 no-duplicate-properties 警告。

【问题讨论】:

    标签: sass gulp gulp-sass


    【解决方案1】:

    通过 cmets 禁用

    2016 年 12 月更新,根据 the docs,现在可以使用以下语法:

    为整个文件禁用超过 1 条规则

    // sass-lint:disable border-zero, quotes
    
    p {
      border: none; // No lint reported
      content: "hello"; // No lint reported
    }
    

    为单行禁用规则

    p {
      border: none; // sass-lint:disable-line border-zero
    }
    

    禁用块内的所有 lint(以及所有包含的块)

    p {
      // sass-lint:disable-block border-zero
      border: none; // No result reported
    }
    

    新信息由评论者 @IanRoutledge 提供。

    但是,之前,如果您想禁用某些规则,但仅限于特定代码块和/或代码片段。 据我所知,从底层源代码tell 使用 sass-lint不可能。我也尝试了其他一些搜索,并且大致浏览了代码库,但没有发现您正在寻找的功能存在的提示。

    为了比较,this query for the scss-lint source code 清楚地表明它在那里实现的,在您使用的库中似乎没有类似的解决方案。

    通过 yml 配置禁用

    可以在一般情况下禁用规则。您需要有一个.sass-lint.yml 文件才能禁用警告。

    假设你有这个gulpfile.js:

    'use strict';
    
    var gulp = require('gulp'),
        sassLint = require('gulp-sass-lint');
    
    gulp.task('default', [], function() {
      gulp.src('sass/*.scss')
        .pipe(sassLint())
        .pipe(sassLint.format())
        .pipe(sassLint.failOnError());
    });
    

    还有这个package.json

    {
      "devDependencies": {
        "gulp": "^3.9.0",
        "gulp-sass": "^2.1.1",
        "gulp-sass-lint": "^1.1.1"
      }
    }
    

    在这个styles.scss 文件上运行:

    div { dsply: block; }
    

    你得到这个输出:

    [23:53:33] Using gulpfile D:\experiments\myfolder\gulpfile.js
    [23:53:33] Starting 'default'...
    [23:53:33] Finished 'default' after 8.84 ms
    
    sass\styles.scss
      1:7   warning  Property `dsply` appears to be spelled incorrectly  no-misspelled-properties
      1:21  warning  Files must end with a new line                      final-newline
    
    ??? 2 problems (0 errors, 2 warnings)
    

    现在,如果您在 gulpfile 旁边添加一个 .sass-lint.yml 文件,其内容如下:

    rules:
      no-misspelled-properties: 0
    

    你会看到:

    [23:54:56] Using gulpfile D:\experiments\myfolder\gulpfile.js
    [23:54:56] Starting 'default'...
    [23:54:56] Finished 'default' after 9.32 ms
    
    sass\styles.scss
      1:21  warning  Files must end with a new line  final-newline
    
    ??? 1 problem (0 errors, 1 warning)
    

    现在忽略其中一个警告。

    The sass-lint readme.md 链接到the apparent default config,其中有更多示例。

    【讨论】:

    • 当触发错误的东西实际上是故意的时,我需要在我的 SASS 中禁用特定样式的警告。我不想禁用所有警告。我已经更新了我的问题以使其更清楚。
    • 点了。我想我会把我的答案留给通过谷歌搜索到这里的其他人,可能对某人有用。
    • @Evans 我已经更新了我的答案。据我所知,使用 sass-lint 是不可能的。如果另一个答案证明我错了,请联系我,以便我可以从我自己的答案中删除该假设。
    • 感谢@IanRoutledge。该线程获得了相当多的观看次数,因此我已将您在我的答案中提供的信息进行了汇总。欢迎提出进一步的修改建议以改进它。
    【解决方案2】:

    从 sass-lint 1.10.0 开始,可以通过源 cmets 禁用 sass-lint 规则

    下面是这个的不同排列,故意几乎与之前的 scss-lint 方式相同。

    为整个文件禁用规则

    // sass-lint:disable border-zero
    p {
      border: none; // No lint reported
    }
    

    禁用超过 1 条规则

    // sass-lint:disable border-zero, quotes
    p {
      border: none; // No lint reported
      content: "hello"; // No lint reported
    }
    

    为单行禁用规则

    p {
      border: none; // sass-lint:disable-line border-zero
    }
    

    禁用块内的所有 lint(以及所有包含的块)

    p {
      // sass-lint:disable-block border-zero
      border: none; // No result reported
    }
    
    a {
      border: none; // Failing result reported
    }
    

    禁用并再次启用

    // sass-lint:disable border-zero
    p {
      border: none; // No result reported
    }
    // sass-lint:enable border-zero
    
    a {
      border: none; // Failing result reported
    }
    

    禁用/启用所有 linter

    // sass-lint:disable-all
    p {
      border: none; // No result reported
    }
    // sass-lint:enable-all
    
    a {
      border: none; // Failing result reported
    }
    

    sass-lint readme 包含所有详细信息,docs 也已更新。

    grunt、gulp 和 atom 插件也都已更新为需要 v1.10 及更高版本,因此快速重新安装这些插件或更新即可。

    很抱歉花了这么长时间才出来,但我们必须先修复 AST 中的一些问题,然后才能确信它们有用。

    【讨论】:

    • 我试过 // sass-lint:disable-all, // sass-lint:disable/enable [rule],正如你所建议的那样——它们都像魔法一样工作,谢谢!
    【解决方案3】:

    从 sass-lint 1.10 开始支持禁用特定行的 linting 规则。

    https://github.com/sasstools/sass-lint#disabling-linters-via-source

    目前 sass-lint 不支持基于每个文件或每行禁用规则。他们有一个long-standing GitHub issue 跟踪该功能。

    【讨论】:

    【解决方案4】:

    明白了。

    首先,这是 sass-lint 的规则列表:

    https://github.com/sasstools/sass-lint/tree/develop/lib/rules

    接下来,您可以为您想要的规则设置一个选项:

    rule:
        severity: 0
    

    0 = 没有写入

    1 = 警告

    2 = 错误

    这是你需要的吗?

    【讨论】:

    • 我需要忽略某些样式,而不是设置全局规则。例如,应该正常显示重复样式警告,但是对于我的 SASS 中的特定单个实例,这是故意的,我只需要禁用此实例的警告。
    猜你喜欢
    • 2018-11-06
    • 2012-09-16
    • 1970-01-01
    • 2019-08-22
    • 2020-12-22
    • 2015-02-18
    • 2012-07-15
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多