C'è una regola CheckStyle per forzare se le parole chiave altro di essere sulla stessa linea in un caso scala / altro?

StackOverflow https://stackoverflow.com/questions/387008

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?

È stato utile?

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
  Descrizione

     

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

  

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 )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top