New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
vueの独自カスタムブロックのフォーマット整形にはeslintがいいのかPrettierがいいのか #7
Comments
Thank you for this issue! ふむ。 ESLint を使うのであれば、Plugin を作って整形処理を描くことになります。 // ルール定義.js
"use strict"
module.exports = {
meta: {
description: ""
},
create(context) {
const sourceCode = context.getSourceCode()
return {
// Program ノード (AST のルート) で呼ばれる
Program(node) {
if (!node.templateBody) {
return
}
// <template>の兄弟タグから <page-query> を探す
const topLevelNodes = node.templateBody.parent.children
for (const node of topLevelNodes) {
if (node.type === "VElement" && node.name === "page-query") {
// Do checking on the node.
}
}
}
}
}
} こんな感じ |
ご回答有り難うございます。 僕のやりたいことはどちらかというと、 |
ほえ? と思ったら、それはユニットテスト (というか Integration Test) ですね。
|
お久しぶりです。 https://github.com/tyankatsu0105/eslint-gridsome/blob/master/rules/page-query.js
というところで悩んでおります。 |
おお。
こちらは簡単で、テストパターンに tester.run(/*略*/, {
invalid: [
{
code: "チェックするコード",
output: "fixされたコード",
errors: ["fix前に表示されるエラーメッセージ"]
}
],
}) また、自動修正をサポートするルールは、 module.exports = {
meta: {
fixable: null, // スペースのみ修正する場合は "whitespace", それ以外は "code".
},
create(context) {/*略*/}
} その他
これは、NG ですね。 こんな感じ? // <page-query>の中のstringの取得 ... 開始タグの終端から終了タグの始端まで。
const codeRange = [
node.startTag.range[1],
node.endTag ? node.endTag.range[0] : node.range[1],
]
const code = sourceCode.text.slice(...codeRange).trim()
// 整形する
const formattedCode = prettier.format(code, { parser: prettierParser });
// 整形した結果が現在と異なっていれば報告する
if (formattedCode !== code) {
context.report({
loc: node.loc,
message: `format is incorrect`,
fix(fixer) {
return fixer.replaceTextRange(codeRange, `\n${formattedCode}\n`)
}
})
} |
@mysticatea testも書いてみました。 認識が違うかもしれないので確認させてください。
という認識です。 質問が二点あります。
助けてください🙏 |
Yes.
これは、 んー、ああ。テストケースのコードに |
templateいれるとエラーがたくさん出てきましたね・・・・ |
@mysticatea invalidのテストが通ったんですが、僕の予期していないコードの形になっていて、なぜ通ったのかよくわかっていません(ログでインデント少しずつ修正していたらこうなってしまいました・・・) validのテストなのですが、
と出ていて、エラーの見方がよくわかりません。 |
そのオブジェクトは実際に報告されたエラーのオブジェクトですね。 テストに利用しているコードのインデントが原因ではないでしょうか? |
@mysticatea validの箇所が相変わらず通っていないのですが、エラーのオブジェクトのfix.textを見る感じ、
|
|
ああ、や。 |
@mysticatea
これから試したいことが2つあるのですが、不明な点があります。
こちらで方法が紹介されていたので
というコマンドを作成したのですが、
こちらに関しては、このページを参考にすればいいのかなと思っていましたが、なんだが違うような気がしてます。合ってますでしょうか?? |
ここでルールをrequireして、 ここで各種設定をしてるっぽいですね。 |
ESLint は対象にディレクトリを指定した場合、その中にある
もしくは、直接 Glob で指定します。
(ちなみに、ドットで始まるファイルと
はい、公式ドキュメントはそれです: https://eslint.org/docs/developer-guide/working-with-plugins
利用側では
|
@mysticatea おせわになりました。ありがとうございます!! |
🎉 |
はじめまして。
vueファイルの整形に関して質問です。
最近こちらのフレームワークで開発を進めていまして、
https://github.com/gridsome/gridsome
vueファイルの中に
<page-query></page-query>
や<static-query></static-query>
といったカスタムブロックにGraphQLが書けるというものが魅力的なフレームワークです。Prettierではparserに
graphql
があるので、もしかしたらカスタムブロックの整形ができるかもと思っています。(現状Prettierでは独自なブロックなのでフォーマット整形が無視されます)しかし、eslint-plugin-gridsome的なものでも実現できるかもしれない???と思っており、
この二択で悩んでいます。
どうかお知恵をお貸しください🙇♂️
The text was updated successfully, but these errors were encountered: