C'è una regola CheckStyle per forzare se le parole chiave altro di essere sulla stessa linea in un caso scala / altro?
-
23-08-2019 - |
Domanda
In base a questa domanda si sembra che il modello predefinito per CheckStyle consentirà se scalette altro per separare il if
e else
con un'interruzione di linea.
Significato Vorrei questo il codice per essere contrassegnato come una violazione:
if (true)
{
System.out.println("20");
}
else
if (true)
{
System.out.println("30");
}
C'è una regola CheckStyle per evitare questo? Guardando oltre la documentazione, non vedo uno, e preferirei non usare la regola regex generica, se io non devo.
Inoltre, se uso il modulo GenericIllegalRegexp, regex multilinea non sembrano funzionare. C'è qualche rimedio a questo?
Soluzione
Non sono sicuro che si può facilmente scrivere un estensione Checkstyle, dato che il codice di navigazione AST della Checkstyle SDK Gui non fa alcuna differenza tra:
else if
e
else
if
In ogni caso, è un else
LITERAL_ELSE
con al suo interno un if
...
Così il else[ \t]*[\r\n]+[ \t]*if
regexp generica è davvero un modo rapido per rilevare questo tipo di codice.
Fissare l'espressione regolare per includere i casi sono stati:
- non c'è spazio non scheda prima / dopo ritorno a capo
- la è più a capo.
Naturalmente, non si vuole utilizzare l'espressione regexp \s
spazio bianco, in quanto si comprende caratteri di nuova riga. E 'chiaro a spazi separati da caratteri di ritorno.
Nota: in Checkstyle 5.0beta, non usare "Generic illegale espressione regolare", ma piuttosto il " Regexp" modulo :
è possibile configurare tale modulo RegExp come 'illegalPattern' (con una gravità associato di 'Warning'), e non c'è bisogno di usare 'Multi-line' bandiera qualsiasi tipo AF:. l'espressione regolare è abbastanza
Regexp
DescrizioneUn controllo che consente di verificare l'esistenza di un modello specificato, esiste meno di un determinato numero di volte, o non esiste nel file.
Questa verifica combina tutte le funzionalità fornite da RegexpHeader, GenericIllegalRegexp e RequiredRegexp, tranne fornire le espressioni regolari da un file.
si differenzia da loro in che funziona in modalità multilinea . E 'espressione regolare può estendersi su più righe e controlla questo contro l'intero file in una sola volta. Gli altri lavorano in modalità SingleLine. Le loro espressioni regolari singoli o multipli possono estendersi su una sola linea. Controllano ciascuno di questi contro ogni riga del file, a sua volta.
Thomas menziona nella commenti : / p>
L'AST checkstyle ha linea di informazioni sul numero.
vedi " C'è qualche regola Checkstyle / PMD / Findbugs per forza‘else if
’di essere sulla stessa linea? "
(In cui si deve usare un personalizzati Seleziona , e non un regex partita )