Diciamo che ho
procedure1() {
--body of first procedure--
}
Quindi lo rinominerò in procedure2
e creerò un procedure1
sopra di esso:
procedure1() {
--body of second procedure--
}
procedure2() {
--body of first procedure--
}
Non una volta uno strumento di diffusione basato sulla linea ha evidenziato il codice da --body of second procedure
fino a procedure2() {
come nuovo codice all'interno di procedure1
.
Questo è destinato a succedere, dal momento che molti strumenti di diff sono ignari della struttura sottostante del codice sorgente. Anche gli strumenti di diffusione basati su AST non possono funzionare molto bene, a causa di diversi motivi e so che le persone vogliono davvero uno strumento di diffusione semantico , ma non succederà.
Non ho visto una discussione, tuttavia, sul fatto che sarebbe pratico annotare il codice in modo tale che uno strumento di diffusione basato sulla linea comprendesse la struttura sottostante del codice sorgente.
Ad esempio, potrei inserire alcuni UUID nel codice, come questo:
//BeginBlock{E999A3BF-626E-428F-A2C1-6AFF0CD22BF2}
procedure1() {
--body of first procedure--
}
//EndBlock
E il codice modificato sarebbe simile a questo:
//BeginBlock{7C734F0A-92F4-45EB-B653-DBB9A0F18354}
procedure1() {
--body of second procedure--
}
//EndBlock
//BeginBlock{E999A3BF-626E-428F-A2C1-6AFF0CD22BF2}
procedure2() {
--body of first procedure--
}
//EndBlock
Il punto è assegnare alcuni token (univoci all'interno di un file o di un progetto) ad alcuni segni che riflettono parte della struttura del codice sorgente.
Un IDE può aggiornare automaticamente queste annotazioni e potrebbe aiutare uno strumento diff a rilevare meglio i cambiamenti strutturali. Lo strumento eseguirà la scansione del codice una sola volta per identificare le sezioni del programma (e il modo in cui sono state spostate) e quindi confrontare i blocchi con lo stesso ID.
Pensi che questo approccio sia pratico?