2011-10-11 4 views
7

Sto tentando di configurare l'uncrustify (un codice sorgente di bellezza) su evitando l'allineamento al di sotto di una parentesi aperta precedente. Ad esempio, mi piacerebbe il codice per assomigliare a questo (da file indent_paren.c):Utilizzo della procedura di non crittografia senza allineamento sotto parentesi aperta

void f(void) 
{ 
    while (one && 
     two) 
    { 
     continue; 
    } 
} 

Quando eseguo Uncrustify sul codice di cui sopra, la linea two) trattini per allinearsi con l'( dalla linea sopra:

void f(void) 
{ 
    while (one && 
      two) 
    { 
     continue; 
    } 
} 

sto utilizzando l'ultima versione di Uncrustify (0,59) compilato da fonte, con le seguenti impostazioni di configurazione per questo test (nel file di indent_paren.cfg):

indent_with_tabs = 0 
indent_columns = 4 
indent_paren_nl = false 
indent_bool_paren = false 

sto invocando Uncrustify come segue:

uncrustify -c indent_paren.cfg indent_paren.c 

ho trovato lo stesso comportamento con la versione 0.56 (installato dal repository per Ubuntu 11.04). Sto usando la configurazione errata delle impostazioni , o c'è qualcos'altro che non va qui? Grazie per qualsiasi aiuto.

risposta

9

Dopo ulteriore sperimentazione e speleologia nel codice sorgente di Uncrustify, ho trovato che l'opzione indent_continue fa per lo più quello che voglio. Per impostazione predefinita, indent_continue è zero e le righe continue sono rientrate in alto sotto la parentesi aperta nella riga sopra riportata . L'impostazione di indent_continue su un valore diverso da zero sovrascrive questo comportamento, provocando il rientro delle linee di continuazione in base al "livello" corrente. Quindi il mio esempio originale è rientrato, se lo desideri quando si utilizzano le seguenti impostazioni nel uncrustify.cfg:

indent_with_tabs = 0 
indent_columns = 4 
indent_continue = 4 

Perché il "livello" viene incrementato per parentesi nidificate, tuttavia, non v'è più il rientro di quanto desiderato per i casi tali come:

void g(void) 
{ 
    /* Nested parentheses cause undesired additional indent. */ 
    TRACE(("The varargs need extra parentheses %d %d\n", 
     (firstArgIsLong + 
     withMultipleTerms), 
     secondArg)); 
} 

Le impostazioni di cui sopra generano indentazione come segue, con indesiderate livelli extra di rientro:

void g(void) 
{ 
    /* Nested parentheses cause undesired additional indent. */ 
    TRACE(("The varargs need extra parentheses %d %d\n", 
      (firstArgIsLong + 
       withMultipleTerms), 
      secondArg)); 
} 

Osservando la fonte non crittografata, sembra che questo comportamento non sia regolabile. indent_continue dà i risultati desiderati nella maggior parte dei casi, e sembra essere il più vicino che non criticare può venire in questo momento.

Problemi correlati