matype / stylefmt

stylefmt is a tool that automatically formats stylesheets.
Other
2.1k stars 89 forks source link

selector-list-comma-* まわりの出力が思ったようにいきません #193

Closed irok closed 7 years ago

irok commented 7 years ago

セレクタを複数指定するときに、一行で書いてるとこと複数行で書いてるところがあって、どちらもそのままにしたいのですが、どう設定をいじっても一行または複数行に統一されてしまいます。

    .foo, .bar { ... }

    .hoge,
    .fuga {
        ...
    }

.stylelintrc は以下のようになってます。(stylelintはこれで通ります。)

    "selector-list-comma-newline-after": "always-multi-line",
    "selector-list-comma-space-after": "always-single-line",
    "selector-list-comma-space-before": "never",

selector-list-comma-newline-beforeは未指定です

環境は Node 4.4.2, stylefmt 4.2.3, gulp-postcss 6.1.1 (postcss 5.1.1) です。

irok commented 7 years ago

コード見ていたのですが、もし lib/formatSelectors.js の isSingleLine が、

    .foo, .bar { ... }

の場合は true

    .hoge,
    .fuga {
        ...
    }

の場合は false になるのが正しいのだとすれば、そうなっていないのが原因な気がします。

lib/formatSelectors.js#L19 を見ると、!tmp[1].match('\n')で改行の有無を見て isSingleLine に true を設定していますが、rule.selectorsの各要素はpostcssによってtrimされていますので、\nが入ってこないように思います。 https://github.com/postcss/postcss/blob/master/lib/rule.es6#L40-L42

rule.selectorには分割前のセレクタが入っているので、

  var isSingleLine = !/\n/.test(rule.selector)

でよいのかなと思いました。

irok commented 7 years ago

とはいえ、それだけでは思ったとおりの出力は得られず、separator の構築部分もいじる必要がありそうでした。

seka commented 7 years ago

stylefmt は .stylelintrc などの stylelint の config ファイルがプロジェクトに含まれていた場合に、stylelint から警告が発生しないように css を整形します。

.stylelintrc の設定通りに css が整形されないというご報告だと思うのですが、.stylelintrc は stylefmt の設定ファイルではないということをご理解頂ければと思います 🙇

irok commented 7 years ago

ご回答ありがとうございます。 stylefmt の開発方針というか目的というか、その辺りをよく理解できていませんでした。 好みのスタイルに整形するツールではないということですね。目的に合わせて使うようにします。