atom-beautifyで.vueを整形した時にpugのインデントが気に食わない
タイトル時点で何かニッチな感じがする。時間のないときに限って気になってしまうものですよね…。
なんの話か
Vueの単一コンポーネントファイル*.vue
をatom-beautifyで整形すると、まあまあうまいこと整形するんですよね、恐ろしいことに。ところが、<template lang="pug">
で使っていると、なぜかここだけインデントがタブになる。なぜだ。
ヒント
みんな(?)困ってるわけです。
コード弄ったら直ったよ、的なのがヒントです。pug-beautifyのコードいじってるみたいですが、いやいやそもそもこれってオプションがきちんと渡ってないってことなんでは。それ以前にオプションってなによ。
オプションとは何か
なんだか気になってしまったので追いかけることにしました。Atomは恐ろしいことにデバッグコンソールが出せるんですよね。使ってますか。なんなんだこのエディタ。
読み込まれているファイルのツリーから怪しげなものを探し…まあatom-beautify/src/beautifier/vue-beautifier.coffeescript
でしょうね。
中を読んでみると、正規表現でtemplate, style, scriptの各タグを切り分けて、さらにlangも読んで適切なbeautifierに渡すようになっています。なるほどなるほど。なんだか想像がついてきましたが、ブレークポイントを入れて中身を見てみますか。
うん。何かこれ見たことある。atom-beautifyのVue設定にある項目ですよね。それがそのまま渡されている。pug-beautifyに。
pug-beautifyの設定は
fill_tab : true/false,default true, fill whether tab or space.
omit_div : true/false,default false, whether omit 'div' tag.
tab_size : number, default 4, when 'fill_tab' is false, fill 'tab_size' spaces.
だそうです(https://www.npmjs.com/package/pug-beautify)。atom-beautifyのVue設定項目とは互換性なさそう。
だけど結局、設定が単純に渡されているだけだから、自分で書けばいい。
結論
config.csonのatom-beautify設定に以下のようなものを追加する。
"*":
"atom-beautify":
vue:
fill_tab: false
tab_size: 2
考察
これ、こういう仕様なのかもではあるのだけれど、atom-beautify/vueの設定をそのまま渡すんじゃなくて、きちんとコンバートすればいいだけなんでは。こういう感じに。
diff --git a/src/beautifiers/vue-beautifier.coffee b/src/beautifiers/vue-beautifier.coffee
index 6c693b9..764749b 100644
--- a/src/beautifiers/vue-beautifier.coffee
+++ b/src/beautifiers/vue-beautifier.coffee
@@ -22,7 +22,10 @@ module.exports = class VueBeautifier extends Beautifier
when "template"
switch lang
when "pug", "jade"
- require("pug-beautify")(text, options)
+ require("pug-beautify")(text,
+ fill_tab: options.indent_with_tab
+ tab_size: options.indent_size
+ )
when undefined
require("js-beautify").html(text, options)
else
ただ実際やってみると、options.indent_size
の設定が読めてない(デフォルトから上書きされていない)気がする。それはAtom側の仕様のような…余裕のあるときにちゃんと追いかける…かもしれない…。
おまけ
設定を書き加えるとおもむろに出てくるUI。
デフォルトのインターフェイスにはないけれど値が追加されると、とりあえず出しておこう、みたいになるんでしょうか(調べてない)。
Author And Source
この問題について(atom-beautifyで.vueを整形した時にpugのインデントが気に食わない), 我々は、より多くの情報をここで見つけました https://qiita.com/aql/items/a6ff334aa9968b9f333a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .