Js-beautify: 「フォーマットされていない」パラダイムが壊れている、「フォーマットされていない」と「インライン」が同じではない

作成日 2016年01月13日  ·  6コメント  ·  ソース: beautify-web/js-beautify

js-beautifyが何をラップするかを決定する際に採用するアプローチ全体は、私が正しく理解していれば、概念的に壊れています。

次のHTMLがあるとしましょう。

    <li>Install at least one Git client. <span class="tip">Recommended: <a

         href="https://www.sourcetreeapp.com/">SourceTree</a> (Windows, Mac)</span>all Git commands.</li>

<a>タグ属性内の空白と改行に注意してください。 spanunformatted要素の1つとして配置した場合、js-beautifyは何も変更しません。 それはすべての醜い空白を残します!

一方、 unformatted要素からspanを削除すると、js-beautifyは次のようになります。

    <li>Install at least one Git client.
        <span class="tip">Recommended: <a href="https://www.sourcetreeapp.com/">SourceTree</a> (Windows, Mac)</span>all Git commands.</li>

js-beautifyは<span>前に改行を追加することに注意してください! これも完全に間違っています--- <span>はインラインの言い回し要素であり、ここで中断する必要はありません。

問題は、js-beautifyが「フォーマットされていない」という概念を「インライン」要素と同等に使用していることのようです。 これは間違ったアプローチであり、HTML / CSSセマンティクスと一致しません!! ブロックとインラインの違いは、要素をラップする必要があるかどうかと完全に直交しています。

js-beautifyは、要素がブロックであるかインラインであるかを判別する必要があります。 ブロック要素の前には改行が必要です。 インライン要素はすべきではありません。

「フォーマットされていない」という概念は明確な概念です。 要素がブロックであるかインラインであるかに関係なく、js-beautifyにそのままにしておくように指示する必要があります。

現在のように、要素に改行を含める必要がないことをjs-beautifyに伝える方法はありませんが、その内容はフォーマットする必要があります。

全体のデザインが壊れています。 この根本的な問題を修正してください。 (または、私が間違っていること、およびjs-beautifyが「ブロック/インライン」と「フォーマット済み/フォーマットなし」の概念を混同していないことを説明してください。)

html enhancement

最も参考になるコメント

あなたが私が言っていることを理解しているかどうかはわかりません。 すべての要素をフォーマットする必要があります! 一部はインラインであり、一部はブロック要素であるというだけです。 これが、数十年前からXML / HTML / CSSで行われてきた方法です。

ブロック要素の場合は、視覚的に新しいブロックを作成します。 これらのものは、HTMLソースコードをフォーマットするとき、ほとんどの場合、それらの前に改行があります(ソースコードとレンダリングの両方で)。 インライン要素の前には改行がありません(ソースコードとディスプレイの両方で)。 しかし、それはその_contents_がフォーマットされるべきではないという意味ではありません。 (ただし、行を折り返す場合を除いて、その内容に改行を追加してはならないことを意味します。)

したがって、これは微調整ではありません。 これは、js-beautifyがフォーマットに使用するパラダイム全体が壊れているという認識です。 (私は意地悪ではありません---私はただ客観的であり、説明することによってあなたを助けようとしています。)あなたは3つの異なるものを区別する必要があります:

  • 「フォーマット済み」-この要素はフォーマットされていますか? (デフォルトでは、誰かがオフにしない限り、すべての要素をフォーマットする必要があります。)
  • 「ブロック/表示」-これはブロックですか、それとも表示要素ですか? ブロック要素の場合は、開始タグの前に改行_prepended_を付け、現在のインデントレベルにインデントする必要があります。 そうでない場合は、前に改行を入れないでください。
  • 「コンテナ」-これは通常、他のブロック要素を含むためにのみ使用されますか? その場合、開始タグの_後_、終了タグの後に改行を生成し、内容を新しいインデントレベルでインデントする必要があります。 これは最も物議を醸すものです。つまり、これはユーザーの好みによって最も異なります。 明らかな候補の1つは<ul>です。 その内容(例: <li> )はインデントする必要があります。 <p>タグが別々の行に表示されるように、このリストに<p>を追加したい人もいます。 他の人(例えば私)はそれらを別々の行に置きたくないでしょう。

CSSボックスモデルを確認し、ブロックとインラインの仕組みを理解することをお勧めします。 次に、CSSボックスモデルを考慮に入れて、js-beautify HTMLフォーマットロジックを書き直します(ソースコードは、レンダリングが最終的にどのように行われるかを反映する必要があるため)。

デフォルトでは、「フォーマットされていない」ものはありません。 すべてをフォーマットする必要があります---適切にフォーマットするだけです。 「フォーマットされていない」は、ユーザーが「js-beautifyの機能が気に入らないので、この要素に触れないで対処させてください」と言うための最後の手段となるはずです。

全てのコメント6件

それがどのように機能するかについてのあなたの提案は合理的に聞こえます。 どの要素をインラインにするか、どの要素をフォーマットしないかをリストしてください。 次に、プルリクエストを実装して送信してください。

あなたが私が言っていることを理解しているかどうかはわかりません。 すべての要素をフォーマットする必要があります! 一部はインラインであり、一部はブロック要素であるというだけです。 これが、数十年前からXML / HTML / CSSで行われてきた方法です。

ブロック要素の場合は、視覚的に新しいブロックを作成します。 これらのものは、HTMLソースコードをフォーマットするとき、ほとんどの場合、それらの前に改行があります(ソースコードとレンダリングの両方で)。 インライン要素の前には改行がありません(ソースコードとディスプレイの両方で)。 しかし、それはその_contents_がフォーマットされるべきではないという意味ではありません。 (ただし、行を折り返す場合を除いて、その内容に改行を追加してはならないことを意味します。)

したがって、これは微調整ではありません。 これは、js-beautifyがフォーマットに使用するパラダイム全体が壊れているという認識です。 (私は意地悪ではありません---私はただ客観的であり、説明することによってあなたを助けようとしています。)あなたは3つの異なるものを区別する必要があります:

  • 「フォーマット済み」-この要素はフォーマットされていますか? (デフォルトでは、誰かがオフにしない限り、すべての要素をフォーマットする必要があります。)
  • 「ブロック/表示」-これはブロックですか、それとも表示要素ですか? ブロック要素の場合は、開始タグの前に改行_prepended_を付け、現在のインデントレベルにインデントする必要があります。 そうでない場合は、前に改行を入れないでください。
  • 「コンテナ」-これは通常、他のブロック要素を含むためにのみ使用されますか? その場合、開始タグの_後_、終了タグの後に改行を生成し、内容を新しいインデントレベルでインデントする必要があります。 これは最も物議を醸すものです。つまり、これはユーザーの好みによって最も異なります。 明らかな候補の1つは<ul>です。 その内容(例: <li> )はインデントする必要があります。 <p>タグが別々の行に表示されるように、このリストに<p>を追加したい人もいます。 他の人(例えば私)はそれらを別々の行に置きたくないでしょう。

CSSボックスモデルを確認し、ブロックとインラインの仕組みを理解することをお勧めします。 次に、CSSボックスモデルを考慮に入れて、js-beautify HTMLフォーマットロジックを書き直します(ソースコードは、レンダリングが最終的にどのように行われるかを反映する必要があるため)。

デフォルトでは、「フォーマットされていない」ものはありません。 すべてをフォーマットする必要があります---適切にフォーマットするだけです。 「フォーマットされていない」は、ユーザーが「js-beautifyの機能が気に入らないので、この要素に触れないで対処させてください」と言うための最後の手段となるはずです。

PS HTML5のインライン要素を構成するものを示す#840ですでに開始しました。 ただし、現在、フォーマットエンジン全体を書き直す時間はありません。 その時間があれば、自分で書くだけの方が効率的です。 それまでの間、私はあなたがあなたの仕事をすることができるようにあなたを助けようとしています。それは私たち両方にとって最善でしょう。 頑張ってください、そして私が提供できるさらなる情報を教えてください。

私はあなたが最初に言ったことを完全に理解しています。 あなたはhtml美容師にバグがあると信じています。 「js-beautifyが[html]のフォーマットに使用するパラダイム全体が壊れている」と説明したいと思います。 私はhtmlbeautifierモジュールを設計または実装していませんでしたが、このプロジェクトのメンテナーとしての私の時間の中で最も改善が見られませんでした。 それは間違いなく注意と大幅な手直しが必要です、そしてそのことについてはCSS美化器もそうです。

ただし、htmlビューティファイアは、欠陥があるにもかかわらず、合理的に問題のない方法でいくつかのことを実行します。 そして、特に#840を扱うには、「書き直し」または「パラダイム」の変更が必要であるというあなたの評価に疑問を投げかけます。 これは他と同じように拡張されています。 醜いハッカリーから完全な再設計と書き直しまで、おそらくそれを実装する方法はいくつかあります。

範囲がどうであれ、あなたが説明した変更は最終的に行う価値があると思いますが、プロジェクト全体で優先度が高い、具体的で、十分に説明された、需要の高いバグ修正と機能のかなりのリストがすでにあります。 私はこのプロジェクトのために私が持っている少しの時間をそれらのアイテムに費やさなければなりません。 これを今すぐ修正する価値があると本当に信じている場合は、時間をかけて修正する必要があります。 プルリクエストを歓迎します。

あなたはhtml美容師にバグがあると信じています。

いいえ、要素の_前_に改行を入れないようにjs-beautifyに指示すると同時に、要素の_内部_に何もフォーマットしないようにjs-beautifyに指示する方法はないと言っています。 これは本当ですか、それともそうではありませんか?

「js-beautifyが[html]のフォーマットに使用するパラダイム全体が壊れている」と説明したいと思います。

js-beautifyが「前に改行を追加してはならないもの」と「完全に無視しなければならないもの」の違いを知らない場合、そうです、そのパラダイムは単純なHTMLでも不十分です。 結局のところ、 <dfn>前に改行は必要ありません(これはインライン要素であるため)が、 <dfn><img>が含まれている場合は必要ありませんjs- <img>タグのフォーマットを控えるように美化します。 (これは不自然な例です。すべてのインライン画像に適用されます。)

だからあなたは私に言います。 js-beautifyは、 <dfn>前に改行を入れずに、 <dfn>内の<img>フォーマットできますか?

私が言っていることのポイントは、「この要素の内容をフォーマットしない」は「この要素の前に改行を入れない」とは異なるということです。 では、もう一度お聞きします。 js-beautifyは、これら2つの違いを理解していますか、それともこれらの概念を混同していますか? 違いがわからないと、基本的なモデルが壊れてしまいます。

しかし確かに、時には根本的な欠陥を回避することができます。 だから私は戻ってきてもう一度あなたに尋ねます:私はこの欠陥をどのように回避しますか? <code>前に改行を入れずに、 <code>内の<img>要素をフォーマットするようにjs-beautifyに指示するにはどうすればよいですか?

@garretwilsonこれは1.8.0-rc2で利用可能です。

このページは役に立ちましたか?
0 / 5 - 0 評価