【问题标题】:Configuring Sass Lint for BEM为 BEM 配置 Sass Lint
【发布时间】:2018-08-28 08:11:56
【问题描述】:

所以我打算将我的 sass 写入 BEM 约定。我已经使用sass-lint configuration generator 创建了我的配置,并且只将class-name-format- convention: 编辑为strictbem,但是我仍然遇到一些问题。

也许我误解了 BEM?

错误:

[sass-lint] 类 '.bus__tyre--front' 应该用 BEM(块 元素修饰符)格式(类名格式) <element class="bus__tyre--front">

萨斯:

.bus {
  position: relative;

  &__tyre {
    position: absolute;

    &--front {
      bottom: -22px;
      right: 3%;
      width: 17%;
    }
  }
}

sass-lint.yml:

# sass-lint config generated by make-sass-lint-config v0.1.2
#
# The following scss-lint Linters are not yet supported by sass-lint:
# DisableLinterReason, ElsePlacement, PropertyCount, SelectorDepth
# SpaceAroundOperator, TrailingWhitespace, UnnecessaryParentReference, Compass::*
#
# The following settings/values are unsupported by sass-lint:
# Linter Indentation, option "allow_non_nested_indentation"
# Linter Indentation, option "character"
# Linter NestingDepth, option "ignore_parent_selectors"
# Linter PropertySortOrder, option "min_properties"
# Linter PropertySortOrder, option "separate_groups"
# Linter SpaceBeforeBrace, option "allow_single_line_padding"
# Linter VendorPrefix, option "identifier_list"

files:
  include: '**/*.scss'
options:
  formatter: stylish
  merge-default-rules: false
rules:
  bem-depth:
    - 0
    - max-depth: 1
  border-zero:
    - 1
    - convention: zero
  brace-style:
    - 1
    - allow-single-line: true
  class-name-format:
    - 1
    - convention: strictbem
  clean-import-paths:
    - 1
    - filename-extension: false
      leading-underscore: false
  empty-line-between-blocks:
    - 1
    - ignore-single-line-rulesets: true
  extends-before-declarations: 1
  extends-before-mixins: 1
  final-newline:
    - 1
    - include: true
  force-attribute-nesting: 1
  force-element-nesting: 1
  force-pseudo-nesting: 1
  function-name-format:
    - 1
    - allow-leading-underscore: true
      convention: hyphenatedlowercase
  hex-length:
    - 1
    - style: short
  hex-notation:
    - 1
    - style: lowercase
  id-name-format:
    - 1
    - convention: hyphenatedlowercase
  indentation:
    - 1
    - size: 2
  leading-zero:
    - 1
    - include: false
  mixin-name-format:
    - 1
    - allow-leading-underscore: true
      convention: hyphenatedlowercase
  mixins-before-declarations: 1
  nesting-depth:
    - 1
    - max-depth: 3
  no-color-keywords: 1
  no-color-literals: 1
  no-css-comments: 1
  no-debug: 1
  no-duplicate-properties: 1
  no-empty-rulesets: 1
  no-extends: 0
  no-ids: 1
  no-important: 1
  no-invalid-hex: 1
  no-mergeable-selectors: 1
  no-misspelled-properties:
    - 1
    - extra-properties: []
  no-qualifying-elements:
    - 1
    - allow-element-with-attribute: false
      allow-element-with-class: false
      allow-element-with-id: false
  no-trailing-zero: 1
  no-transition-all: 0
  no-url-protocols: 1
  no-vendor-prefixes:
    - 1
    - additional-identifiers: []
      excluded-identifiers: []
  placeholder-in-extend: 1
  placeholder-name-format:
    - 1
    - convention: hyphenatedlowercase
  property-sort-order:
    - 1
    - ignore-custom-properties: false
  property-units:
    - 1
    - global:
        - ch
        - em
        - ex
        - rem
        - cm
        - in
        - mm
        - pc
        - pt
        - px
        - q
        - vh
        - vw
        - vmin
        - vmax
        - deg
        - grad
        - rad
        - turn
        - ms
        - s
        - Hz
        - kHz
        - dpi
        - dpcm
        - dppx
        - '%'
      per-property: {}
  quotes:
    - 1
    - style: single
  shorthand-values:
    - 1
    - allowed-shorthands:
        - 1
        - 2
        - 3
  single-line-per-selector: 1
  space-after-bang:
    - 1
    - include: false
  space-after-colon:
    - 1
    - include: true
  space-after-comma:
    - 1
    - include: true
  space-before-bang:
    - 1
    - include: true
  space-before-brace:
    - 1
    - include: true
  space-before-colon: 1
  space-between-parens:
    - 1
    - include: false
  trailing-semicolon: 1
  url-quotes: 1
  variable-for-property:
    - 0
    - properties: []
  variable-name-format:
    - 1
    - allow-leading-underscore: true
      convention: hyphenatedlowercase
  zero-unit: 1

【问题讨论】:

  • 当我使用提供的 yml 配置和 sass-lint v1.12.1 对您提供的 scss 代码进行 lint 时,结果为零,一切正常(顺便说一句。yml 文件应该拼写为 .sass-lint .yml,而不是 sass-lint.yml)。

标签: sass bem sass-lint


【解决方案1】:

从 scss-lint 存储库中的 #335#319 来看,您似乎需要更改:

class-name-format:
    - 1
    - convention: strictbem

到:

class-name-format:
    - 1
    - convention: hyphenatedbem

希望对你有帮助!

【讨论】:

  • 就是这个!谢谢!
  • 嗯,说,现在任何类,例如.grid,我得到[sass-lint] Class '.grid' should match regular expression /hyphenated_BEM/ (class-name-format)
  • @Jam3sn 我会打开一个新问题或在他们的回购中提出问题以询问该问题。无论哪种方式,一个最小的、可重复的示例将大大加快解决方案!
  • 没有hyphenated_BEM 这样的东西。请编辑或删除
【解决方案2】:

应该是hyphenatedbem,而不是hyphenated_BEM

Example from the sass-lint docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2020-08-07
    • 2018-05-19
    • 2016-03-05
    • 2014-02-24
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多