@@ -21,6 +21,7 @@ private sealed class FullScanSnapshotFailureContext
2121 internal string ? PriorFoldFingerprint { get ; init ; }
2222 internal required List < IndexMemorySampleJsonResult > MemorySamples { get ; init ; }
2323 internal required IReadOnlyDictionary < string , int > LanguageCounts { get ; init ; }
24+ internal required IReadOnlyList < string > UnknownExtensionFiles { get ; init ; }
2425 internal int FilesCount { get ; init ; }
2526 internal int Skipped { get ; init ; }
2627 internal int DanglingSymlinkCount { get ; init ; }
@@ -83,13 +84,39 @@ private static int WriteFullScanSnapshotFailure(
8384 || ( persistedCSharpFiles && failure . PriorMetadataTargetCsharpMatchesCurrent ) ;
8485 var foldReady = ( failure . PriorReadiness & DbContext . FoldReadyFlag ) != 0 ;
8586 var memoryTimeline = BuildMemoryTimeline ( failure . MemorySamples ) ;
87+ var unknownExtensionClassification = UnknownExtensionClassifier . Classify (
88+ failure . UnknownExtensionFiles ) ;
89+ var unknownExtensionGroups = unknownExtensionClassification . Groups
90+ . Take ( UnknownExtensionClassifier . MaxCompletionGroups )
91+ . ToList ( ) ;
92+ var unknownExtensionGroupOmittedCount = Math . Max (
93+ 0 ,
94+ unknownExtensionClassification . GroupCount - unknownExtensionGroups . Count ) ;
95+ var warningCount = failure . Warnings ;
96+ if ( unknownExtensionClassification . ActionableFileCount > 0 )
97+ {
98+ var warning = $ "{ unknownExtensionClassification . ActionableFileCount } file(s) were excluded because no language mapping or extractor was available. { UnknownExtensionClassifier . Guidance } ";
99+ failure . WarningList . Add ( new CliJsonMessage ( "<unknown_extensions>" , warning ) ) ;
100+ warningCount ++ ;
101+ }
86102
87103 if ( failure . Options . Json )
88104 {
89105 CommandOutputWriter . WriteLine ( JsonSerializer . Serialize ( new IndexFullScanJsonResult
90106 {
91107 Status = "partial" ,
92108 Mode = failure . Options . Rebuild ? "rebuild" : "incremental" ,
109+ UnknownExtensionFileCount = failure . UnknownExtensionFiles . Count ,
110+ UnknownExtensionGroups = unknownExtensionGroups . Count > 0 ? unknownExtensionGroups : null ,
111+ UnknownExtensionGroupCount = unknownExtensionClassification . GroupCount ,
112+ UnknownExtensionGroupsTruncated = unknownExtensionGroupOmittedCount > 0 ,
113+ UnknownExtensionGroupLimit = UnknownExtensionClassifier . MaxCompletionGroups ,
114+ UnknownExtensionGroupOmittedCount = unknownExtensionGroupOmittedCount ,
115+ UnknownExtensionDiagnosticsScope = "workspace" ,
116+ UnknownExtensionFileCountLowerBound = true ,
117+ UnknownExtensionGuidance = failure . UnknownExtensionFiles . Count > 0
118+ ? UnknownExtensionClassifier . Guidance
119+ : null ,
93120 Summary = new IndexFullScanSummaryJsonResult
94121 {
95122 FilesTotal = totalFiles ,
@@ -100,7 +127,7 @@ private static int WriteFullScanSnapshotFailure(
100127 FilesSkipped = failure . Skipped ,
101128 FilesPurged = 0 ,
102129 DanglingSymlinksSkipped = failure . DanglingSymlinkCount ,
103- Warnings = failure . Warnings ,
130+ Warnings = warningCount ,
104131 Errors = failure . Errors ,
105132 SymbolsDroppedByKindFilter = failure . SymbolsDroppedByKindFilter ,
106133 } ,
0 commit comments