2013-06-08 13 views
12

È possibile utilizzare ReSharper per rendere non utile il codice utile ma di scarsa qualità utilizzando ReSharper? Ad esempio, quando voglio aggiungere la registrazione dettagliata, sarebbe opportuno far risaltare il codice funzionale attorno al codice di registrazione.Codice di registrazione in grigio con ReSharper

Ho provato a utilizzare la ricerca del catalogo di modelli di ReSharper per far corrispondere gli schemi nel mio codice e evidenziarli in grigio, ma supporta solo suggerimenti, suggerimenti, avvisi ed errori.

Sto cercando qualcosa di simile a come Debug.WriteLine viene visualizzato in modalità di rilascio, anche se non voglio il codice per essere compilato.

+3

Questa è un'idea interessante. Puoi suggerirlo sul tracker dei problemi: http://youtrack.jetbrains.com/issues/RSRP –

+0

È stato suggerito qui: https://youtrack.jetbrains.com/issue/RSRP-437773 –

risposta

-3

Proprio non farlo.

È un pessimo modo di gestire il codice non strutturato e sarà solo leggermente utile, e solo per te. Se lo fai come suggerisci (se possibile), altri sviluppatori devono installare ReSharper e configurarlo come te se vogliono che la logica aziendale si distingua.

Questo non è quello che hai chiesto, ma penso che un approccio migliore sia spostare la registrazione dettagliata in metodi/classi separati. Quindi il codice relativo alla registrazione sarebbe solo una chiamata al metodo singolo nei metodi attuali.

+1

Non puoi muoverti tutto il codice banale (come la registrazione o il controllo) per separare i metodi, di solito è intrecciato con la logica. –

9

È possibile eseguire questo tipo di operazione, ma è una specie di modifica. Quello che potresti fare è decorare i tuoi metodi di registrazione con lo ConditionalAttribute, usando il numero External Annotations di ReSharper.

annotazioni sono utilizzati in ReSharper quasi ovunque, è come si sa al grigio fuori la linea Debug.WriteLine in uscita, ad esempio, dal momento che le linee Debug.Write... sono decorati con l'attributo [Conditional("DEBUG")].

Che cosa si potrebbe fare è imbrogliare facendo ReSharper pensare che un metodo tale condizione esiste sui metodi del logger. Puoi farlo applicando questo attributo esternamente tramite XML.

ho scritto di fare qualcosa di simile in my blog, ecco come si potrebbe fare questo:

  1. Creare un file chiamato YourLogger.ExternalAnnotations.xml, per esempio NLog.ExternalAnnotations.xml e posizionarlo accanto al tuo gruppo di logger.
  2. Aggiungere il seguente:
<assembly name="NLog"> 
    <member name="M:NLog.Logger.Info(System.String)"> 
    <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> 
     <argument>LOG</argument> 
    </attribute> 
    </member> 
    <member name="M:NLog.Logger.Debug(System.String)"> 
    <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> 
     <argument>LOG</argument> 
    </attribute> 
    </member> 
</assembly> 

Per ogni metodo che si desidera "in grigio", è necessario aggiungere un blocco <member> con il nome di XML-Doc ID del metodo. In EAP di ReSharper 8 è disponibile un'opzione Copia ID XML-Doc negli Appunti, che si trova sotto il menu di ReSharper Edit.

Questo essenzialmente fa pensare al motore di ReSharper che esiste un valore [Conditional("LOG")] definito nei metadati di tipo del registratore.

Dopo aver aggiunto tutti i metodi desiderati, è sufficiente ricaricare la soluzione. Dovresti ottenere ciò che stai cercando (una specie di ...come ho detto, si tratta di un hack :))

ReSharper hackery

+0

Sconsiglio vivamente di farlo, perché le invocazioni cancellate dall'attributo '[Conditional]' influenzano il grafico del flusso di controllo del compilatore C# e l'analisi dell'assegnazione definita, nonché l'analisi del codice di R #. ReSharper ignorerà qualsiasi informazione utile sulle espressioni che vengono valutate come parte delle invocazioni di '[Conditional]', cioè "troppo" per solo ingrigire il codice. Meglio scrivere un plugin :) – ControlFlow

+1

@ControlFlow Dovrei probabilmente aggiungere "non provarlo a casa" dichiarazione di non responsabilità :) –

Problemi correlati