sass-lint 是不是忽略了某行?

Posted

技术标签:

【中文标题】sass-lint 是不是忽略了某行?【英文标题】: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 警告。

【问题讨论】:

【参考方案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 是不可能的。如果另一个答案证明我错了,请联系我,以便我可以从我自己的答案中删除该假设。 v1.10.1 现在支持此功能,github.com/sasstools/sass-lint#disabling-linters-via-source 感谢@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 跟踪该功能。

【讨论】:

v1.10.1 现在支持此功能,github.com/sasstools/sass-lint#disabling-linters-via-source【参考方案4】:

明白了。

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

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

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

rule:
    severity: 0

0 = 没有写入

1 = 警告

2 = 错误

这是你需要的吗?

【讨论】:

我需要忽略某些样式,而不是设置全局规则。例如,应该正常显示重复样式警告,但是对于我的 SASS 中的特定单个实例,这是故意的,我只需要禁用此实例的警告。

以上是关于sass-lint 是不是忽略了某行?的主要内容,如果未能解决你的问题,请参考以下文章

忽略插入错误

SQL 选择不同的行,如果为空则忽略行

如何检查文件是不是被git忽略[重复]

如果没有人调用interrupt(),是不是可以忽略InterruptedException?

在发布模式下是不是忽略了 assert(false)?

EF Core:检查 OnModelCreating 中是不是存在列以忽略属性