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 是不是忽略了某行?的主要内容,如果未能解决你的问题,请参考以下文章