Js-beautify: Paradigma "tidak diformat" rusak, "tidak diformat" dan "sebaris" tidak sama

Dibuat pada 13 Jan 2016  ·  6Komentar  ·  Sumber: beautify-web/js-beautify

Seluruh pendekatan yang dilakukan js-beautify dalam menentukan apa yang harus dibungkus secara konseptual rusak, jika saya memahaminya dengan benar.

Katakanlah saya memiliki HTML berikut:

    <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>

Catat semua ruang kosong dan baris baru di dalam atribut tag <a> . Jika saya menempatkan span sebagai salah satu elemen unformatted , maka js-beautify tidak mengubah apa pun! Itu meninggalkan semua ruang putih jelek itu!

Jika di sisi lain saya menghapus span dari elemen unformatted , maka js-beautify memberi saya ini:

    <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>

Perhatikan bahwa js-beautify sekarang menambahkan baris baru sebelum <span> ! Ini juga sepenuhnya salah --- <span> adalah elemen frasa sebaris, dan tidak perlu dipecah di sini.

Masalahnya tampaknya js-beautify menggunakan ide "tidak diformat" untuk setara dengan elemen "inline". Ini adalah pendekatan yang salah dan tidak cocok dengan semantik HTML/CSS!! Gagasan jika blok vs sebaris sepenuhnya ortogonal dengan apakah elemen harus dibungkus.

js-beautify harus menentukan apakah suatu elemen adalah blok atau inline. Elemen blok harus memiliki baris baru sebelum mereka; elemen sebaris seharusnya tidak.

Gagasan "tidak diformat" adalah konsep yang berbeda; itu harus memberi tahu js-beautify untuk membiarkannya sendiri, terlepas dari apakah elemen itu blok atau inline.

Seperti sekarang, tidak ada cara untuk memberi tahu js-beautify bahwa suatu elemen harus _tidak_ memiliki baris baru, namun isinya harus diformat.

Seluruh desain rusak. Tolong perbaiki masalah mendasar ini. (Atau jelaskan kepada saya bahwa saya salah, dan js-beautify tidak menggabungkan konsep "blok/sebaris" dan "diformat/tidak diformat".)

html enhancement

Komentar yang paling membantu

Saya tidak yakin Anda mengerti apa yang saya katakan. Semua elemen harus diformat! Hanya saja ada yang sebaris, dan ada pula yang merupakan elemen blok. Inilah yang terjadi dengan XML/HTML/CSS selama beberapa dekade sekarang.

Jika itu adalah elemen blok, maka itu membuat blok baru secara visual. Hal-hal ini, ketika memformat kode sumber HTML, hampir selalu memiliki baris baru sebelum mereka (baik dalam kode sumber dan dalam rendering). Elemen sebaris tidak memiliki baris baru sebelumnya (baik di kode sumber maupun di tampilan). Tapi itu tidak berarti _contents_-nya tidak boleh diformat. (Ini _does_ berarti isinya tidak boleh menambahkan baris baru, kecuali jika Anda membungkus baris.)

Jadi ini bukan tweak. Ini adalah pengakuan bahwa seluruh paradigma yang digunakan js-beautify untuk pemformatan rusak. (Saya tidak bermaksud jahat --- saya hanya bersikap objektif, dan mencoba membantu Anda dengan menjelaskan.) Anda perlu membedakan di antara tiga hal yang berbeda:

  • "diformat" - Apakah elemen ini diformat? (Secara default semua elemen harus diformat, kecuali seseorang mematikannya.)
  • "block/display" - Apakah ini blok atau elemen tampilan? Jika itu adalah elemen blok, itu harus memiliki baris baru _prepended_ sebelum tag awal, dan harus menjorok ke tingkat indentasi saat ini. Jika tidak, seharusnya tidak ada baris baru di depannya.
  • "wadah" - Apakah benda ini biasanya hanya digunakan untuk menampung elemen blok lainnya? Jika demikian, maka baris baru harus dibuat _setelah_ tag awal, setelah tag penutup, dan konten harus diindentasi pada tingkat indentasi baru. Ini yang paling kontroversial, yaitu paling bervariasi tergantung selera pengguna. Salah satu kandidat yang jelas adalah <ul> ; isinya (misalnya <li> ) harus diindentasi. Beberapa orang ingin menambahkan <p> ke daftar ini sehingga tag <p> akan berada di baris terpisah. Orang lain (misalnya saya) tidak akan menginginkannya di jalur terpisah.

Saya sarankan Anda meninjau model kotak CSS dan memahami cara kerja blok vs sebaris. Dan kemudian tulis ulang logika pemformatan HTML js-beautify, dengan mempertimbangkan model kotak CSS (karena kode sumber harus mencerminkan bagaimana rendering pada akhirnya akan dilakukan).

Secara default tidak ada yang harus "diformat". Semuanya harus diformat --- hanya diformat dengan tepat. "tidak diformat" harus menjadi pengaturan terakhir bagi pengguna untuk mengatakan, "hei, saya tidak suka apa yang dilakukan js-beautify, jadi jangan sentuh elemen ini dan biarkan saya menanganinya.

Semua 6 komentar

Usulan Anda tentang cara kerjanya terdengar masuk akal. Harap cantumkan elemen mana yang harus sebaris vs mana yang tidak diformat. Kemudian silakan terapkan dan kirimkan permintaan tarik.

Saya tidak yakin Anda mengerti apa yang saya katakan. Semua elemen harus diformat! Hanya saja ada yang sebaris, dan ada pula yang merupakan elemen blok. Inilah yang terjadi dengan XML/HTML/CSS selama beberapa dekade sekarang.

Jika itu adalah elemen blok, maka itu membuat blok baru secara visual. Hal-hal ini, ketika memformat kode sumber HTML, hampir selalu memiliki baris baru sebelum mereka (baik dalam kode sumber dan dalam rendering). Elemen sebaris tidak memiliki baris baru sebelumnya (baik di kode sumber maupun di tampilan). Tapi itu tidak berarti _contents_-nya tidak boleh diformat. (Ini _does_ berarti isinya tidak boleh menambahkan baris baru, kecuali jika Anda membungkus baris.)

Jadi ini bukan tweak. Ini adalah pengakuan bahwa seluruh paradigma yang digunakan js-beautify untuk pemformatan rusak. (Saya tidak bermaksud jahat --- saya hanya bersikap objektif, dan mencoba membantu Anda dengan menjelaskan.) Anda perlu membedakan di antara tiga hal yang berbeda:

  • "diformat" - Apakah elemen ini diformat? (Secara default semua elemen harus diformat, kecuali seseorang mematikannya.)
  • "block/display" - Apakah ini blok atau elemen tampilan? Jika itu adalah elemen blok, itu harus memiliki baris baru _prepended_ sebelum tag awal, dan harus menjorok ke tingkat indentasi saat ini. Jika tidak, seharusnya tidak ada baris baru di depannya.
  • "wadah" - Apakah benda ini biasanya hanya digunakan untuk menampung elemen blok lainnya? Jika demikian, maka baris baru harus dibuat _setelah_ tag awal, setelah tag penutup, dan konten harus diindentasi pada tingkat indentasi baru. Ini yang paling kontroversial, yaitu paling bervariasi tergantung selera pengguna. Salah satu kandidat yang jelas adalah <ul> ; isinya (misalnya <li> ) harus diindentasi. Beberapa orang ingin menambahkan <p> ke daftar ini sehingga tag <p> akan berada di baris terpisah. Orang lain (misalnya saya) tidak akan menginginkannya di jalur terpisah.

Saya sarankan Anda meninjau model kotak CSS dan memahami cara kerja blok vs sebaris. Dan kemudian tulis ulang logika pemformatan HTML js-beautify, dengan mempertimbangkan model kotak CSS (karena kode sumber harus mencerminkan bagaimana rendering pada akhirnya akan dilakukan).

Secara default tidak ada yang harus "diformat". Semuanya harus diformat --- hanya diformat dengan tepat. "tidak diformat" harus menjadi pengaturan terakhir bagi pengguna untuk mengatakan, "hei, saya tidak suka apa yang dilakukan js-beautify, jadi jangan sentuh elemen ini dan biarkan saya menanganinya.

PS Saya sudah memberi Anda permulaan di #840 yang menunjukkan apa yang merupakan elemen sebaris dalam HTML5. Saya tidak punya waktu sekarang untuk menulis ulang seluruh mesin pemformatan Anda. Jika saya mendapatkan waktu itu, akan lebih efisien jika saya menulis sendiri. Jadi sementara itu, saya mencoba membantu Anda sehingga Anda bisa mendapatkan pekerjaan Anda, yang akan menjadi yang terbaik untuk kita berdua. Semoga berhasil, dan beri tahu saya informasi lebih lanjut apa yang bisa saya berikan.

Saya benar-benar mengerti apa yang Anda katakan awalnya. Anda yakin ada bug di html beautifier. Anda ingin menggambarkannya sebagai "seluruh paradigma yang digunakan js-beautify untuk memformat [html] rusak". Saya tidak mendesain atau mengimplementasikan modul html beautifier, dan modul ini paling sedikit menunjukkan peningkatan dalam waktu saya sebagai pengelola proyek ini. Itu pasti membutuhkan perhatian dan pengerjaan ulang yang signifikan, dan begitu juga dengan CSS beautifier dalam hal ini.

Namun, html beautifier melakukan beberapa hal dengan cara yang lumayan meskipun ada kekurangannya. Dan saya mempertanyakan evaluasi Anda bahwa penanganan #840 khususnya akan memerlukan "penulisan ulang" atau perubahan "paradigma". Ini adalah peningkatan seperti yang lain. Mungkin ada beberapa cara untuk mengimplementasikannya, mulai dari peretasan yang buruk, hingga desain ulang dan penulisan ulang penuh.

Apa pun cakupannya, saya pikir perubahan yang Anda uraikan layak dilakukan pada akhirnya, tetapi saya sudah memiliki daftar perbaikan bug dan fitur yang konkret, dijelaskan dengan baik, dan sangat dituntut yang memiliki prioritas lebih tinggi secara keseluruhan untuk proyek tersebut. Saya harus menghabiskan sedikit waktu yang saya miliki untuk proyek ini untuk barang-barang itu. Jika Anda benar-benar yakin ini layak diperbaiki sekarang, Anda perlu meluangkan waktu untuk melakukannya. Saya menyambut permintaan tarik.

Anda yakin ada bug di html beautifier.

Tidak, saya mengatakan bahwa tidak ada cara untuk memberi tahu js-beautify untuk tidak meletakkan jeda baris _before_ elemen tanpa pada saat yang sama memberi tahu js-beautify untuk tidak memformat apa pun _inside_ elemen. Apakah ini benar atau ini tidak benar?

Anda ingin menggambarkannya sebagai "seluruh paradigma yang digunakan js-beautify untuk memformat [html] rusak".

Jika js-beautify tidak mengetahui perbedaan antara "hal-hal yang tidak boleh ditambahkan jeda baris sebelumnya" dan "hal-hal yang harus saya abaikan sama sekali", maka ya, paradigmanya tidak memadai bahkan untuk HTML sederhana. Lagi pula, saya tidak ingin jeda baris sebelum <dfn> (karena ini adalah elemen sebaris), tetapi jika <dfn> berisi <img> , saya tidak mau js-beautify untuk tidak memformat tag <img> . (Ini adalah contoh yang dibuat-buat; ini berlaku untuk gambar sebaris apa pun.)

Jadi Anda memberitahu saya. Bisakah js-beautify memformat <img> di dalam <dfn> tanpa meletakkan umpan baris sebelum <dfn> ?

Maksud dari apa yang saya katakan adalah bahwa "jangan format konten elemen ini" berbeda dari "jangan letakkan baris baru sebelum elemen ini." Jadi izinkan saya bertanya lagi. Apakah js-beautify memahami perbedaan antara dua hal ini, atau apakah itu menggabungkan konsep-konsep ini? Jika tidak memahami perbedaannya, model dasarnya rusak.

Tapi tentu saja, terkadang Anda bisa mengatasi kekurangan mendasar. Jadi saya kembali dan bertanya lagi: bagaimana saya mengatasi kekurangan ini? Bagaimana saya memberi tahu js-beautify untuk tidak meletakkan umpan baris sebelum <code> tetapi untuk tetap memformat elemen <img> di dalam <code> ?

@garretwilson Ini tersedia di 1.8.0-rc2 .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat