2012-04-20 11 views
11

C'è un modo per fare in modo che Xcode non riformatti il ​​codice formattato, o c'è uno strumento come l'ingiustificato che può formattare il codice sorgente che usa i blocchi?Come formattare il codice sorgente con parentesi su nuove linee con blocchi e Xcode?

Con i blocchi in ogg-c, il codice è diventato difficile da leggere. Una soluzione è quella di scrivere la definizione di blocco e mettere tra parentesi graffe su nuove linee, in questo modo:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) 
{ 
    //block of code 
}); 

E:

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) 
{ 
    //block of code 
}]; 

Bella e facile!

Ma Xcode non conserva questo formato e non riesco a trovare un modo per rendere il codice di output non crittografato in questo modo. Uncrustify è veramente buono, ma forse i blocchi sono troppo nuovi?

Qualche idea?

[dichiarazione di non responsabilità: So che questo può trasformarsi in "ora del troll", ma il codice dovrebbe essere il più facile da leggere possibile e disporre di parentesi graffe sulla stessa colonna rende le cose molto più chiare (per me). Soprattutto se hai diversi blocchi all'interno di un blocco. Quindi, se il codice non ti piace, prova a ignorare la domanda.]

+0

Ho anche problemi con la formattazione dei blocchi di codice all'interno dei parametri.Non sono stato in grado di trovare le impostazioni per modificare il rientro del codice e le parentesi dopo un^:( – Biclops

+2

No, semplicemente non ci sono impostazioni per questo.Tuttavia, quando si usano piccoli blocchi xCode capisce che se prima si digita '^ (void) 'e quindi inserire, le seguenti parentesi saranno posizionate correttamente –

+3

Provate a creare l'ultima versione di uncrustify da GitHub. Ha un supporto per i blocchi molto migliorato rispetto alla versione 0.59 rilasciata – nschum

risposta

3

L'aggiornamento più recente (circa 2 mesi o più) di non criticare risolve quasi il problema. Basta impostare le seguenti voci nel file di configurazione: (. Ho usato indent_with_tabs = 0 perché ho potuto't farlo funzionare con le schede probabilmente non è necessario.)

indent_oc_block       = true 
indent_with_tabs       = 0   
indent_columns       = 4  # set to the same as indent_switch_case 
indent_switch_case      = 4  # set to the same as indent_columns 

E, naturalmente, per il nuovo line after/before {} imposta tutto ciò che vuoi del nl_some_parameter_brace su "force".

Ora Uncrustify gestirà il codice, non inserirà nuove linee in blocchi per voi, il codice come questo rimarrà brutto:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) { 
    //code 
} 

Se qualcuno trova il modo di rendere inserire nuove linee in modo appropriato , dimmelo, ti prego.

Grazie a @ipmcc per l'aggiornamento su uncrustify.

Modifica: Sì, xCode offusca il codice ogni volta che si copia/incolla. Uso questo ottimo plugin xCode per semplificare il flusso di lavoro: https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

Edit 2: Uncrustify non gestisce molto bene i blocchi nidificati (ancora meglio di Xcode). Ad esempio, i blocchi nidificati diventano:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) 
{ 
    [array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) 
     { 
      [array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) 
       { 
        NSLog(@"the pumpkin pie!"); 
       }]; 
     }]; 
}); 
-1

XCode utilizza "frammenti di codice" incorporati per l'autocompletamento. Aprire la libreria dei frammenti di codice facendo clic sull'icona {} nel riquadro della libreria. Non è possibile modificare i frammenti direttamente all'interno di XCode stesso, ma l'app SnippetEdit consente di modificarli.

Suggerisco di fare un backup del file 'codesnippets' prima di modificarli. Si trova in /Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets

Problemi correlati