Apply the ModelView# false-positive fix to the production scanner
The standalone script already excluded internal saved-view IDs (ModelView#<numero>) from the referenced-codes heuristic; the app's own "Trova componenti referenziati" phase used the same regex without the fix. Ports the lookbehind so both stay consistent, per docs/formato-asm.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4a3f0a4cf8
commit
bb99c4f4c5
2 files changed
+20
-1
No files matched your search
@@ -53,6 +53,20 @@ public class AssemblyComponentScannerTests
|
|||||||
finally { File.Delete(percorso); }
|
finally { File.Delete(percorso); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Scarta_id_di_viste_salvate_ModelView()
|
||||||
|
{
|
||||||
|
// Visto su 9044207061.asm: "ModelView#1073741828" compare più volte ma è un ID
|
||||||
|
// interno di vista salvata, non un codice componente.
|
||||||
|
string percorso = ScriviAsmFinto("x ModelView#1073741828 y ModelView#1073741828 z");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var codici = AssemblyComponentScanner.EstraiCodiciReferenziati(percorso);
|
||||||
|
Assert.DoesNotContain("1073741828", codici);
|
||||||
|
}
|
||||||
|
finally { File.Delete(percorso); }
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void File_inesistente_lancia_eccezione_IO() =>
|
public void File_inesistente_lancia_eccezione_IO() =>
|
||||||
Assert.Throws<DirectoryNotFoundException>(() =>
|
Assert.Throws<DirectoryNotFoundException>(() =>
|
||||||
|
|||||||
@@ -16,10 +16,15 @@ namespace CadSearchGui;
|
|||||||
/// riferimenti veri compaiono più volte nel file (una volta per feature/placement),
|
/// riferimenti veri compaiono più volte nel file (una volta per feature/placement),
|
||||||
/// mentre il rumore binario casuale che assomiglia a un codice compare quasi sempre
|
/// mentre il rumore binario casuale che assomiglia a un codice compare quasi sempre
|
||||||
/// una sola volta. Si scartano quindi i candidati con una sola occorrenza.
|
/// una sola volta. Si scartano quindi i candidati con una sola occorrenza.
|
||||||
|
///
|
||||||
|
/// Falso positivo noto ed escluso: gli ID interni di viste salvate, nel formato
|
||||||
|
/// "ModelView#<numero>", hanno la stessa forma di un codice (8-12 cifre) e
|
||||||
|
/// compaiono più volte come un riferimento vero. Vedi docs/formato-asm.md.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static class AssemblyComponentScanner
|
static class AssemblyComponentScanner
|
||||||
{
|
{
|
||||||
private static readonly Regex CodiceRegex = new(@"\b\d{8,12}(?:_[A-Za-z]\d{2,4}|[A-Za-z]{0,2})\b", RegexOptions.Compiled);
|
private static readonly Regex CodiceRegex = new(
|
||||||
|
@"(?<!ModelView#)\b\d{8,12}(?:_[A-Za-z]\d{2,4}|[A-Za-z]{0,2})\b", RegexOptions.Compiled);
|
||||||
private const int OccorrenzeMinime = 2;
|
private const int OccorrenzeMinime = 2;
|
||||||
|
|
||||||
public static HashSet<string> EstraiCodiciReferenziati(string percorsoAsm)
|
public static HashSet<string> EstraiCodiciReferenziati(string percorsoAsm)
|
||||||
|
|||||||
Reference in new issue
Block a user