Bagaimana menghentikan formatter Eclipse menempatkan semua enum dalam satu baris


106

Saya memiliki enum seperti:

public static enum Command
{
login,
register,
logout,
newMessage
}

Saat memformat file, hasilnya menjadi:

public static enum Command 
{
login, register, logout, newMessage
}

1
Apakah ada variabel dalam formatter eksternal (org.eclipse.jdt.core.formatter ......) untuk memberlakukan setiap variabel enum dalam baris terpisah?
Paramesh Korrakuti

Jawaban:


198

Jawaban oleh @wjans berfungsi dengan baik untuk enum normal, tetapi tidak untuk enum dengan argumen. Untuk sedikit memperluas jawabannya, berikut pengaturan yang memberikan pemformatan paling masuk akal bagi saya di Eclipse Juno:

  1. Window> Preferences> Java> Code Style>Formatter
  2. Klik Edit
  3. Pilih Line Wrappingtab
  4. Pilih enumtreenode deklarasi
  5. Set Line wrapping policyuntuk Wrap all elements, every element on a new line (...)jadi sekarang mengatakan 3 dari 3 di kurung.
  6. Hapus centang Force split, even if line shorter than maximum line width (...)sehingga sekarang tertulis 3 dari 3 dalam tanda kurung.
  7. Pilih ConstantsTreeNode
  8. Memeriksa Force split, even if line shorter than maximum line width

Ini menyetel 3 subnode untuk enum treenode ke kebijakan pembungkusan yang sama, dan kebijakan pemisahan paksa yang sama kecuali untuk Constantstreenode, jadi enum Anda dengan argumen akan diformat masing-masing pada barisnya sendiri. Argumen hanya akan tergabung jika melebihi lebar garis maksimum.

Contoh:

@wjans

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

enum Example {
    GREEN(
        0,
        255,
        0),
    RED(
        255,
        0,
        0)
}

Solusi yang dijelaskan di atas:

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

enum Example {
    GREEN(0, 255, 0),
    RED(255, 0, 0)
}

1
Masih terlihat salah di pratinjau gerhana untuk saya, tetapi ketika saya mencobanya di sumber yang sebenarnya, itu berfungsi seperti pesona. Terima kasih.
Ben Thurley

50

Anda dapat menentukan ini di preferensi formatter Anda:

  • Preferensi: Java - Gaya Kode - Pemformat
  • Klik Edit
  • Pilih tab 'Line Wrapping'
  • Pilih deklarasi 'enum' -> Konstanta di kotak sebelah kiri
  • Setel kebijakan Pembungkusan baris ke 'Bungkus semua elemen, setiap elemen pada baris baru'
  • Centang 'Paksa perpecahan ...'

Saya mengalami masalah ini selama berbulan-bulan. Hal yang tidak saya coba adalah "force split". Tidak yakin mengapa ini diperlukan karena Anda mengira "membungkus semua elemen" akan benar-benar membungkus semua elemen! Terima kasih atas solusinya.
LegendLength

11

Ini juga sedikit jelek, tetapi jika kebijakan perusahaan Anda mencegah Anda mengubah formatter, Anda bisa meletakkan komentar di akhir baris yang tidak ingin Anda tutupi.

public static enum Command 
{
    login,//
    register,//
    logout,//
    newMessage//
};

5

Ini tidak bagus tetapi Anda dapat mematikan formatter Eclipse untuk beberapa bagian kode ...

// @formatter:off
public static enum Command {
    login,
    register,
    logout,
    newMessage
};
// @formatter:on

opsinya ada di Windows-> Preferensi-> Java-> Gaya Kode-> Formatter-> Edit-> Off / On Tag panel


1
Ini bekerja ... semacam. Kompilator sekarang menganggapnya sebagai kesalahan. Menempatkan mereka dalam komentar mengatasi masalah ini seperti // @formatter: nonaktif
Bob Kuhar

4

Anda perlu menyetel kebijakan penggabungan baris di bawah deklarasi enum untuk "Konstanta."

Setel kebijakan pembungkusan ke

  • Bungkus semua elemen, setiap elemen pada baris baru

DAN

  • Centang kotak yang bertuliskan "Paksa Pisah, meskipun baris lebih pendek dari ,,,,,

0

Hanya menambahkan Eclipse terbaru 2018.9

  1. Window > Preferences > Java > Code Style > Formatter - Edit
  2. Luaskan Line Wrappingsimpul pohon.
  3. Memperluas Wrapping settings
  4. Memperluas 'enum' declaration
  5. Edit Constantsdan Constant arguments.

Konstanta perlu Wrap all elements, every element on a new line. Argumen yang konstan perlu Wrap where necessary.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.