2013-01-16 13 views
6

Utilizzo lo strumento di analisi del codice statico OCLint per l'obiettivo C e desidero scoprire come personalizzare le regole? Le regole sono rappresentate da set di file dylib.Personalizzazione regola OCLint

risposta

4

La risposta, come con così tante cose, è che dipende.

  1. Se si vuole scrivere il proprio regola personalizzata, allora avrete bisogno di scendere e sporco nel scrivere il proprio dominio, in C++ sulla parte superiore del codice sorgente esistente. Controlla la directory oclint-rules/rules, size/LongLineRule.cpp è una semplice regola per andare avanti. È necessario ricompilare, ecc.

  2. Se si desidera modificare i parametri di una regola esistente, è necessario aggiungere il parametro della riga di comando -rc=<rulename>=<value> alla chiamata a oclint. Ad esempio, se si desidera che la regola delle righe lunghe si attivi solo per le righe superiori a 150 caratteri, è necessario aggiungere -rc=LONG_LINE=150.

Non ho la pazienza di elencare tutti i diversi parametri che è possibile modificare. L'elenco delle regole è qui http://docs.oclint.org/en/dev/rules/index.html e un elenco di regole basate su soglia qui http://docs.oclint.org/en/dev/customizing/rules.html ma non esiste un elenco di valori accettabili e non so se questi due URL coprono tutte le regole o meno. Potrebbe essere necessario esaminare il codice sorgente per ogni regola per capire come funziona.

4

Se stai usando lo script Xcode si dovrebbe usare oclint_args come questo:

oclint_args oclint-JSON-compilazione-Database "-rc LONG_LINE = 150" | sed 's/(.. \ m {1,2}: [0-9]: [0-9] *:)/\ 1 avvertimento: /'

in quel campione I' m cambiando la regola di LONG_LINE a 150 caratteri

4

Invece di passare la configurazione come argomenti (vedere la risposta di Jon Boydell), è anche possibile creare un file YML denominato .oclint nella directory del progetto.

Ecco un esempio di file che personalizza un paio di cose:

rules: 
    - LongLine 
disable-rules: 
rulePaths: 
    - /etc/rules 
rule-configurations: 
- key: LONG_LINE 
    value: 20 
output: filename 
report-type: xml 
max-priority-1: 10 
max-priority-2: 20 
max-priority-3: 30 
enable-clang-static-analyzer: false