はじめに
前回の続きでコードフォーマットの話です。今回はコードフォーマットの設定について紹介します。Android Studioのコードフォーマット設定は非常に多く、
幸いなことに、
そうは言っても世の中は広く、
共通のコードスタイル
Java固有の話に入る前に共通のコードスタイルについて触れておきます。
- Line separator
(for new files) - 意外なことに改行コードの指定がこんなところにあります。ただし、
新規作成するファイルに限ります。すでに作成済みのファイルは、 そのファイルの改行コードを優先します。 - Right margin
(columns) - 右マージンを指定します。このマージンの値が、
以降のスタイル設定にある程度の影響を及ぼします。 - 一般的には
「80~140」 程度だと思いますが、 筆者は右マージン値による折り返しを好まないため、 無駄に大きな値 (999など) を設定しています。右マージン指定を無効にできないため、 このような方法をとるしかありません。
「Default Indent Options」
- Use tab character
- インデントにハードタブを使うかどうかを指定します。ONにするとハードタブ
( \t
)を用い、 OFFにするとソフトタブ (スペース) を用います。インデントのタブ論争も根の深い問題なので、 そこには触れません。ただ 「筆者はソフトタブ (スペース) を好む」 とだけ記しましょう。 - 「Smart tabs」
を指定すると、 インデントのみハードタブを使い、 それ以外はスペースを用いるいわゆるSmart Tabsモードになるはずなのですが、 実際はそうならずハードタブで補填されます。おそらくバグなのだと思います。IntelliJ IDEAのBTS (YouTrack) を覗いたところ、そのものズバリなチケットがあがっていました。 - OC-6187 Formatter: 'Smart tab' option doesn't convert spaces to tabs correctly
- チケットそのものはAppCodeで報告されていますが、
AppCodeもAndroid Studioも根っこはIntelliJで共通なので同じ問題を抱えています。 - Tab size
- ハードタブの文字数を指定します。環境によってハードタブの文字数が異なることを嫌うのであれば、
通常は 「8」 を指定しておきましょう。 - Indent
- インデントの文字数を指定します。Javaの場合は
「4」 ですが、 General (共通) の場合は 「2」 に設定しています (個人的な好みです)。 - Continuation indent
- 「継続行」
のインデントの文字数を指定します。こちらもJavaの場合は 「8」 ですが、 Generalでは 「4」 にしています (これも好みです)。
コードフォーマッタを抑止する
Javaのコードスタイル
「Preferences / Code Style / Java」
Android Studioの設定項目 | Eclipseの設定項目 |
---|---|
Tabs and Indents | インデント |
Spaces | 空白 |
Wrapping and Braces | 中括弧、 |
Blank Lines | ブランク行 |
JavaDoc | コメント |
Imports | ※該当なし |
Arrangement | ※該当なし |
Code Generation | ※該当なし |
以降、
Tabs and Indents
タブとインデントの設定です。ほとんどが
- Label indent
- 「ラベル」
のインデント文字数を指定します。 「Absolute label indent」 をチェックすると、 先頭行にラベルを記述します。 - Do not indent top level class members
- ここをONにすると、
トップレベルのクラスのメンバ (フィールドやメソッドなど) はインデントを行いません。この不思議な設定項目は何のためにあるのか長年の疑問です (こうゆう特殊なスタイルが実在するってことなんでしょうか?)。 - Use indents relative to expression start
- 「継続行のインデント
(Continuation indent)」をどこから開始するかを指定します。OFFの場合、 直前のコードブロックのインデント位置を基準にしますが、 ONにすると直前の式の開始位置を基準にします。 「Indent:2, Continuation indent:4」 で具体例をリスト1とリスト2 に示します。
Eclipseではインデントの設定項目の中に
Spaces
空白
- Before Parentheses
- 小括弧
「 (
」の前に空白をつけるかどうかを指定します。Eclipseと異なり、 閉じ小括弧 「 )
」への指定はありません。 - Method declartion parentheses : メソッド宣言の小括弧の前
- Method call parentheses : メソッド呼び出しの小括弧の前
- 'if' parentheses :
if
文の小括弧の前 - 'for' parentheses :
for
文の小括弧の前 - 'while' parentheses :
while
文の小括弧の前 - 'switch' parentheses :
switch
文の小括弧の前 - 'try' parentheses :
try
文の小括弧の前 - 'catch' parentheses :
catch
文の小括弧の前 - 'synchronized' parentheses :
synchronized
文の小括弧の前 - Annotation parentheses : アノテーションの小括弧の前
- Around Operators
- 演算子のまわり
(前後) に空白をつけるかどうかを指定します。Eclipseと異なり、 演算子の前・ 後ろといった細かい指定はできません。 - Assignment operators (=, +=, ...) : 代入演算子の前後
- Logical operators (&&, ||) : 論理演算子の前後
- Equality operators (==, !=) : 比較演算子の前後
- Relational operators (<, >, <=, >=) : 比較演算子の前後
- Bitwise operators (&, |, ^) : ビット演算子の前後
- Additive operators (+, -) : 加減算演算子の前後
- Multiplicative operators (*, /, %) : 乗除算演算子の前後
- Shift operators (<<, >>, >>>) : シフト演算子の前後
- Unary operators (!, -, +, ++, --) :単項演算子の前後
- Lambda arrow : ラムダ記号
( ->
)の前後 (Java8用です)。 - Method reference double colon : メソッドリファレンス
( ::
)の前後 (これもJava8ですね……)。
- Before Left Brace
- 中括弧
「 {
」の前に空白をつけるかどうかを指定します。小括弧 「 (
」と同じく、 閉じ中括弧 「 }
」への指定はありません。 - Class left brace : クラス宣言の中括弧の前
- Method left brace : メソッド宣言の中括弧の前
- 'if' left brace :
if-else
文のif
の中括弧の前 - 'else' left brace :
if-else
文のelse
の中括弧の前 - 'for' left brace :
for
文の中括弧の前 - 'while' left brace :
while
文の中括弧の前 - 'do' left brace :
do-while
文のdo
の中括弧の前 - 'switch' left brace :
switch
文の中括弧の前 - 'try' left brace :
try-catch-finally
文のtry
の中括弧の前 - 'catch' left brace :
try-catch-finally
文のcatch
の中括弧の前 - 'finally' left brace :
try-catch-finally
文のfinally
の中括弧の前 - 'synchronized' left brace :
synchronized
ブロックの中括弧の前 - Array initializer left brace : 配列の初期化の中括弧の前
- Annotation array initializer left brace : アノテーションの配列初期化の中括弧の前
- Before Keywords
- 特定のキーワードの前に空白をつけるかどうかを指定します。設定項目を見ると、
これをわざわざOFFにする理由がわからないものばかりです (Eclipseに、 これに相当する設定項目が無いのも頷けるかと)。 - 'else' keyword :
if-else
文のelse
の直前 - 'while' keyword :
do-while
文のwhile
の直前 - 'catch' keyword :
try-catch-finally
文のcatch
の直前 - 'finally' keyword :
try-catch-finally
文のfinally
の直前
- 'else' keyword :
- Within
- 指定した対象の内側を空白で囲みます。たとえば、
メソッド引数の括弧の間などです。 - Eclipseには、
これにピッタリ当てはまる設定項目はありません (「左小括弧の後」 と 「右小括弧の前」 などの組み合わせで再現できます)。 - Code braces : コードブロックの内側
- Brackets : 大括弧の内側
- Array initializer braces : 配列初期化の中括弧の内側
- Grouping parentheses : 式で用いる括弧の内側
- Method call parentheses : メソッド呼び出しの小括弧の内側
- Empty method call parentheses : 引数なしのメソッド呼び出しの小括弧の内側
- Method declartion parentheses : メソッド宣言の小括弧の内側
- Empty method declartion parentheses : 引数なしのメソッド宣言の小括弧の内側
- 'if' parentheses :
if
文の小括弧の内側 - 'for' parentheses :
for
文の小括弧の内側 - 'while' parentheses :
while
文の小括弧の内側 - 'switch' parentheses :
switch
文の小括弧の内側 - 'try' parentheses :
try-with-resource
文のtry
の小括弧の内側 - 'catch' parentheses :
try-catch
文のcatch
の小括弧の内側 - 'synchronized' parentheses :
synchronized
ブロックの小括弧の内側 - Type cast parentheses : キャストの小括弧の内側
- Annotation parentheses : アノテーションの小括弧の内側
- In Ternary Operator
(?:) - 三項演算子
( ?:
)に関する空白の指定です。珍しく 「演算子の後」 という指定があります。そういえば、 Eclipseのフォーマッタには三項演算子に関する項目が無かったような気がします……。 - Before '?' : 三項演算子の
?
の前 - After '?' : 三項演算子の
?
の後 - Before ':' : 三項演算子の
:
の前 - After ':' : 三項演算子の
:
の後
- Before '?' : 三項演算子の
- Within Type Arguments
- 型パラメータに関する空白の指定です。設定項目は1つしかなく、
Eclipseのようなきめの細かい設定はできません。 - After comma : 型パラメータ指定のカンマの後
- Other
- その他の空白指定です。変わったものばかりで、
デフォルト以外に設定する事は無いと思います。 - Before comma : カンマの前
(すべてのカンマが対象ではなく、 主に配列宣言のカンマが対象になります) - After comma : カンマの後
(対象は上記と同じです) - Before semicolon : セミコロンの前
(これも、 for
文やtry-with-resource
文のセミコロンが対象のようです) - After semicolon : セミコロンの後
(対象は上記と同じです) - After type cast : キャストの後
(具体的には図7の通りです)
- Before comma : カンマの前
Wrapping and Braces
折り返しや中括弧{
)
- Keep when reformatting
- リフォーマットの対象外にする要素を指定します。ポリシーというか好みの分かれる部分なので、
それぞれプレビューを見ながらON/ OFFを検討してください。 - Line breaks : 途中の改行位置。意図的なものであれば残すことに意味はあるのですが、
テキトウにやったのと見分けるのが難しいところです。 - Comment at first column : 行の先頭に記述したコメント。TODOコメントなど目立たせるために意図的に行頭にコメントを記述する場合もあるので、
これも悩みどころです。 - Control statement in one line : 1行で記述した制御文。個人的好みとしてはリフォーマットの対象外にしたい要素です。
- Multiple expressions in one line : 1行で記述した複雑な式。
- Simple blocks in one line : 中身の無いブロックを1行で記述します。筆者は以下の2つも含めて、
ONにするのが好みです。 - Simple method in one line : 中身の無いメソッドを1行で記述します。
- Simple classes in one line : 中身の無いクラスを1行で記述します。
- Line breaks : 途中の改行位置。意図的なものであれば残すことに意味はあるのですが、
- Ensure right margin is not exceeded
- 右マージンを超過しないようにします。
- Braces placement
- 中括弧
( {
)の位置を指定します。それぞれの設定項目の選択肢の意味は表2の通りです。 - In class declartion : クラス定義の中括弧の位置
- In method declartion : メソッド定義の中括弧の位置
- Other : それ以外の中括弧の位置
選択肢 | 意味 |
---|---|
End of line | 常にその行の終端 |
Next line if wrapped | 行の終端だが、 |
Next line | 常に次の行 |
Next line shifted | 常に次の行で、 |
Next line, each shifted | 常に次の行で、 |
- Extends/
implements list extends
やimplements
の対象(親クラスやインターフェイスのリスト) の折り返しを指定します。指定できる選択肢は表3の通りです。この表3の選択肢は他の項目でも多く登場するので、 大ざっぱで良いので覚えておいてください。 - "Wrap if long"と"Chop down if long"は違いがわかりづらいのですが、
後者はインターフェイスのリスト部分――長い名前のインターフェイスを複数実装している場合に効果が出ます。 - Align when multiline : 複数のインターフェイスを実装しているときのインデント位置の指定をします。ONでインデントを最初のインターフェイスの桁に揃えます。OFFの場合、
単純に継続行としてインデントを下げます。
- Align when multiline : 複数のインターフェイスを実装しているときのインデント位置の指定をします。ONでインデントを最初のインターフェイスの桁に揃えます。OFFの場合、
選択肢 | 意味 |
---|---|
Do not wrap | 折り返ししない |
Wrap if long | 右マージン以上だったら折り返す |
Chop down if long | 右マージン以上だったら、 |
Wrap always | 常に折り返しする |
- Extends/
implements keyword extends
とimplements
のキーワードの折り返しを指定します。選択肢は表3と同じです(ただし "Chop down if long" はありません)。 - Throws list | Do not wrap / Wrap if long / Chop down if long / Wrap always
throws
に宣言した例外リストの折り返しを指定します。選択肢は表3と同じです。- Align when multiline : 複数の例外の送出を宣言しているときのインデント位置を指定します。ON/
OFFの意味は 『Extends/ implements list』 と同じです。 - Align 'throws' to method start :
throws
キーワードまたは送出する例外を折り返したときにインデントせず、メソッドの開始行と同じ位置に配置します。
- Align when multiline : 複数の例外の送出を宣言しているときのインデント位置を指定します。ON/
- Throws keyword
throws
キーワード の折り返しを指定します。選択肢は表3と同じです(ただし選択肢に 『Chop down if long』 はありません)。 - Method declartion parentheses
- メソッド定義のパラメタ
(引数) 部分の折り返しを指定します。選択肢は表3と同じです。 - Align when multiline : 折り返ししたときのインデント位置を最初のパラメタ位置に合わせるか、
単純に継続行としてインデントするかを指定します。 - New line after '(' : メソッド定義の
(
の後に改行するかを指定します。 - Place ')' on new lin : メソッド定義の
)
の前で改行するかを指定します。
- Align when multiline : 折り返ししたときのインデント位置を最初のパラメタ位置に合わせるか、
- Method call arguments
- メソッドを呼び出すときのパラメタ
(引数) 部分の折り返しを指定します。選択肢は表3と同じです。 - Align when multiline : 引数リストが複数あるときのインデント揃えを指定します。
- Take priority over call chain wrapping : 後述する
『Chained method calls』 より優先するかを指定します。これ単独では意味が無く 『Align when multiline』 と組み合わせて初めて効果がでるようです。 - New line after '(' :
(
の後に改行します。 - Place ')' on new line :
)
の前に改行します。
- Method parentheses
- メソッドの括弧位置
(主に閉じ小括弧) のインデント位置を指定します。 - Align when multiline : 閉じ小括弧のインデント位置を指定します。これ単独では意味は無く
「Method declaration parentheses」 や 「Method call arguments」 の 「Place ')' on new line」 がONのときに効果があります。
- Align when multiline : 閉じ小括弧のインデント位置を指定します。これ単独では意味は無く
- Chained method calls
- 複数のメソッドを連鎖的に呼び出すメソッドチェインのときの折り返しを指定します。選択肢は表3と同じです。
- Align when multiline : メソッドチェインが複数行あるときのインデント位置を最初のメソッドチェインにあわせるか、
単純に継続行としてインデントするかを指定します。
- Align when multiline : メソッドチェインが複数行あるときのインデント位置を最初のメソッドチェインにあわせるか、
- Field groups
- フィールドに関する設定ですが、
インスタンス変数だけではなく、 クラス変数 (定数) にも効果があります。 - Align in columns : 可視性
( public, protected, private
など)や型や変数名、 代入演算子や初期値など、 要素ごとに桁揃えをするかを指定します。
- Align in columns : 可視性
- 'if()' statement
if
文に関する折り返しを指定します。- Force braces : 中括弧
{}
を強制的に付けるかどうかを指定します。選択肢は 表 のとおりえす。これ以降でも何度か「Force braces」 という設定項目が登場しますが、 意味はすべて同じです。 - 'else' on new line :
else
キーワードを常に次の行から開始するかを指定します。 - Special 'else if' treatment :
else if
を特別扱いするかを指定します。ONにした場合、リスト5のように整形されます。
- Force braces : 中括弧
選択肢 | 意味 |
---|---|
Do no force | 中括弧を強制しない |
When multiline | 複数行の場合、 |
Always | 常に中括弧を付ける |
- 'for()' statement
for
文に関する折り返しを指定します。『 for()
statement』自体の選択肢は表3と同じで、 for
文の小括弧内の式に適用されます。- Align when multiline : 繰り返し条件式が複数あるときのインデント揃えを指定します。
- New line after '(' :
(
の後に改行します。 - Place ')' on new line :
)
の前に改行します。 - Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
- 'while()' statement
while
文に関する整形を指定します。- Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
- 'do ... while()' statement
do ~ while
文に関する折り返しを指定します。- Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
- 'while' on new line :
while
キーワードを常に次の行から開始するかを指定します。
- 'switch()' statement
switch
文に関する整形を指定します。- Indent 'case' branches :
case
文をさらにインデントするかを指定します。
- Indent 'case' branches :
- 'try-with-resources'
- Java7から追加された
try-with-resources
文に関する折り返しを指定します。この項目自体の選択肢は表3と同じで、try
文の小括弧内の式(リソース宣言) に適用されます。 - Align when multiline : リソース宣言が複数あるときのインデント揃えを指定します。
- New line after '(' :
(
の後に改行します。 - Place ')' on new line :
)
の前に改行します。
- 'try' statement
try ~ catch
文に関する折り返しを指定します。- 'catch' on new line :
catch
キーワードを常に次の行から開始するかを指定します。 - 'finally' on new line :
finally
キーワードを常に次の行から開始するかを指定します。
- 'catch' on new line :
- Binary expressions
- 二項演算式――というより条件式と呼んだほうがわかりやすいでしょう。
if
文やwhile
文、三項演算子など true/
を返すすべての式が対象になります。ただ、false 試した限りでは条件式に留まらずすべての演算式が対象になっていました (バグでしょうか……)。なお選択肢は表3と同じです。 - Align when multiline : 式が複数行に渡るときのインデント揃えを指定します。
- Operation sign on next line : 継続行を常に演算子から開始するかを指定します。
- Align parenthesised when multiline : 式が複数行に渡るときのカッコ位置の揃えを指定します。……が、
イマイチ効き目がわかりませんでした。 - New line after '(' :
(
の後に改行します。 - Place ')' on new line :
)
の前に改行します。
- Assignment statement
- 代入命令の折り返しを指定します。先ほどの
『Binary expressions』 と意味が被りそうですが、 こちらは代入演算子 ( を対象としています。選択肢は表3と同じです。=
)だけ - Align when multiline : 複数行の代入文
( a = b = c = 10;
のようなケース)のインデント揃えを指定します。 - Assignment sign on next line : 継続行を常に代入演算子から開始するかを指定します。
- Align when multiline : 複数行の代入文
- Ternary operator
- 三項演算子の折り返しを指定します。先ほどの
『Assignment statement』 と同じように三項演算子 ( を対象としています。選択肢は表3と同じです。?
と:
)だけ - Align when multiline : 複数行の式のインデント揃えを指定します。
- '?' and ':' signs on next line : 継続行を常に三項演算子から開始するかを指定します。
- Array initializer
- 配列の初期化に関する折り返しを指定します。選択肢は表3と同じです。
- Align when multiline : 配列の初期化が複数行に渡るときのインデント揃えを指定します。
- New line after '{' :
{
の後に改行します。 - Place '}' on new line :
}
の前に改行します。
- Modifier list
- 装飾子に関する折り返しを指定します。
- Wrap after modifier list : 装飾子のあとで改行するかを指定します。
- Assert statement
assert
文に関する折り返しを指定します。選択肢は表3と同じです。- ':' signs on next line : 継続行を常に
:
から開始するかを指定します。
- ':' signs on next line : 継続行を常に
- Class annotations
- クラスに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
- Method annotations
- メソッドに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
- Field annotations
- フィールドに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
- Parameter annotations
- メソッドのパラメタ
(引数) に対するアノテーションの折り返しを指定します。選択肢は表3と同じです。 - Local variable annotations
- ローカル変数に対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
- Enum annotations
- 列挙型の宣言に関する折り返しを指定します。選択肢は表3と同じです。
Blank Lines
空白行に関する設定です。
- Keep Maximum Blank Lines
- リフォーマットしても残しておく空白行の最大値を指定します。ここで指定した行数より多い
(無駄に見える) 空白行は "Reformat Code..." を実行すると、 それぞれ指定した最大値まで削除されます。 - In declarations : クラスやインターフェイスの宣言内の空白行
(主にメソッドの外側) - In Code : メソッド内側にある空白行。
- Before '}' : 閉じ中括弧
}
の前の空白行
- In declarations : クラスやインターフェイスの宣言内の空白行
- Minimum Blank Lines
- 「Keep Maximum Blank Lines」
とは逆にリフォーマットすると最低限挿入する空白行の行数を指定します。 - Before package statement :
package
文の前の空白行。 - After package statement :
package
文の後の空白行。 - Before imports :
import
文の前の空白行。 - After imports :
import
文の後の空白行。 - Around class : クラス全体の前後の空白行。
- After class header : クラスヘッダ
( class
宣言)の後の空白行。 - After anonymous class header : 匿名クラスのクラスヘッダの後の空白行。
- Around field in interface : インターフェイス・
フィールドの前後の空白行。 - Around field : クラス・
フィールドの前後の空白行。 - Around method in interface : インターフェイス内のメソッド宣言前後の空白行。
- Around method : メソッド全体の前後の空白行。
- Before method body : メソッド本体の前
(メソッド宣言の {
の後)の空白行。
- Before package statement :
JavaDoc
Javadocコメントに関する設定です。IntelliJ IDEA10とか、
- Enable JavaDoc formatting : Javadocの整形を行うかどうかを指定します。Android StudioのJavadocの整形が気に入らなときはここをOFFにしましょう。
- Alignment
- Javadocタグの桁揃えを指定します。
- Align parameter descriptions :
@param
タグの説明文の桁揃えを行います。 - Align thrown exception descriptions :
@throws
タグの説明文の桁揃えを行います。
- Align parameter descriptions :
- Blank lines
- Javadocコメント中の空白行の扱いを指定します。空白行の指定といっても指定した箇所に空白行を1行挿入するだけで、
挿入する行数を変えることはできません。 - After description : Javadocコメント本文とJavadocタグの間に空白行を挿入します。
- After parameter descriptions :
@param
タグと他のJavadocタグの間に空白行を挿入します。 - After return tag :
@return
タグと他のタグの間に空白行を挿入します。
- Invalid tags
- 不正なJavadocタグをそのままにしておくかを決めます。それぞれの項目でOFFにすると、
該当箇所は"Reformat Code..."を実行すると不正なタグは消えて無くなります。 - Keep invalid tags : 不正なJavadocタグをそのままにします。
- Keep empty @param tags : 説明文が空の
@param
タグをそのままにします。 - Keep empty @return tags : 説明文が空の
@return
タグをそのままにします。 - Keep empty @throws tags : 説明文が空の
@throws
タグをそのままにします。
- Other
- Javadocコメントに関するその他の設定です。
- Enable leading asterisks : Javadocコメントの継続行の行頭にアスタリスク
( *
)を付けるかを指定します。 - Use @throws rather than @exception :
@exception
タグではなく、@throws
タグを使います。 - Wrap at right margin : 右マージンを超えるコメントを折り返します。日本語の文区切りが実に大ざっぱです。
- Generate "<p/>" on empty lines : 空白行を
<p/>
に置き換えます。 - Keep empty lines : 空白行をそのまま維持します。
- Do not wrap one line comments : 1行コメント
( /** こうゆうやつ */
)を折り返ししません。 - Preserve line feeds : 任意の改行位置をそのままにします。OFFにすると
『Wrap at right margin』 などに巻き込まれて改行位置が調整されます。 - Parameter descriptions on new line :
@param
や@throws
の説明文を改行してから記述します。
- Enable leading asterisks : Javadocコメントの継続行の行頭にアスタリスク
XML
冒頭で
「Androidタブ」
- Use custom formatting settings for Android XML files : Android用のXMLファイルにこのコードスタイルを適用するかを指定します。
以下、
- AndroidManifest.
xml - Layout Files
- Value Resource Files and Selectors
- Other XML resource files
設定できる項目は以下のとおりです。設定画面にプレビューがないのでわかりづらいです。
- Wrap attributes
- XML属性
(attribute) の折り返しを指定します。選択肢は表3と同じです。 - Insert line break before first attribute
- タグの最初の属性を改行してから記述するかを指定します。
- Insert line break after last attribute
- タグの最後の属性を後に改行するかを指定します。ONにすると、
ちょっとヘンな感じです。
- Group tags with the same name
- 「同じ名前のタグをグループ化する」
と読み取れるのですが、 実際にONにしても何の変化も見られません。見ている対象が悪かったのか、 それともバグなのでしょうか……。 - Insert blank line before tag
- タグの直前に空白行を1行挿入します。
- Insert line breaks around style declaration
- 「スタイル
( <style>
)定義の前後に空白行を挿入する」 と読み取れるのですが、 実際にためしてもそうなりませんでした。これもバグですかね……。
まとめ
この題材を取り上げたことを後悔するほど、
当然、