TLDR; Sto cercando idee su come contrassegnare il codice contenente nomi / percorsi di file che hanno incoerenze incoerenti con il file / directory reale.
Situazione
Sto migrando una base di codice significativa scritta in un linguaggio interpretato da un ambiente di sviluppo Windows / OSX e un ambiente di produzione di Windows in ambiente Linux prod e dev (tramite vagabondo).
Il problema è che ho scoperto nel corso degli anni che vari sviluppatori sono stati negligenti nel garantire che i riferimenti ai file abbiano una capitalizzazione coerente con il file effettivo.
Questo non è solo un problema per includere altri file di codice, ma anche per fare riferimento ai nomi dei modelli e alle classi di caricamento automatico dal loro nome. Ad esempio, qualcuno potrebbe eseguire il rendering di un modello facendo riferimento a mytemplate
ma il file effettivo è chiamato myTemplate.html
, oppure fanno riferimento a MyClass
ma il file è chiamato Myclass
.
In precedenza, gli sviluppatori non erano riusciti a notare queste istanze perché utilizzano i file system senza distinzione tra maiuscole e minuscole che nascondono il problema. Ora che l'ambiente di produzione fa distinzione tra maiuscole e minuscole, un mucchio di bug solitamente oscuri è causato da incoerenze del caso.
Domande
- Qual è il modo migliore per identificare possibili istanze di questo tramite l'analisi statica del codice.
Mi sono reso conto che occuparsi di questo in modo reattivo (cioè in risposta a segnalazioni di bug) è insufficiente - ho bisogno di trovare tutte le istanze in cui questo è probabilmente un problema e riesaminarlo manualmente, ma trovare ogni istanza è scrupoloso. Speravo che potesse esserci uno strumento di analisi statica esistente per questo tipo di problema, ma non sono riuscito a trovarne uno.
Stavo pensando di mettere insieme qualcosa che elencasse tutti i nomi di file e directory, quindi cercare nel codice qualsiasi riferimento a questi, ma con un caso diverso. Questo non sarebbe particolarmente intelligente, ma probabilmente funzionerebbe (anche se probabilmente ci sarebbe un numero significativo di falsi positivi dai nomi delle variabili, ecc.).
- Come posso evitare che ciò accada in futuro
Mentre gli sviluppatori utilizzano ora un ambiente dev di Linux, le cartelle condivise vaganti non fanno distinzione tra maiuscole e minuscole (almeno sui sistemi Windows). In alcuni casi sono stato in grado di aggiungere condizioni di "fast-fail" (quindi controlla esplicitamente il caso e fallisce se non corrispondono, anche se l'operazione del file ha esito positivo), ma non posso farlo dove file i percorsi vengono passati direttamente in una funzione nativa, ad esempio. I test unitari su un ambiente di produzione sono una soluzione, ma alcuni di questi problemi si verificano all'interno dei modelli (ad esempio somefile.js
rispetto a someFile.js
) che è difficile da testare.