Merge pull request #269776 from microsoft/dev/dmitriv/fix-208434

Do not recommend extensions if language is set via auto detection
This commit is contained in:
Dmitriy Vasyura
2025-10-07 14:20:25 -07:00
committed by GitHub

View File

@@ -28,11 +28,15 @@ import { IWorkspaceContextService } from '../../../../platform/workspace/common/
import { areSameExtensions } from '../../../../platform/extensionManagement/common/extensionManagementUtil.js';
import { isEmptyObject } from '../../../../base/common/types.js';
import { PLAINTEXT_LANGUAGE_ID } from '../../../../editor/common/languages/modesRegistry.js';
import { IUntitledTextEditorService } from '../../../services/untitled/common/untitledTextEditorService.js';
const promptedRecommendationsStorageKey = 'fileBasedRecommendations/promptedRecommendations';
const recommendationsStorageKey = 'extensionsAssistant/recommendations';
const milliSecondsInADay = 1000 * 60 * 60 * 24;
// Minimum length of untitled file to allow triggering extension recommendations for auto-detected language.
const untitledFileRecommendationsMinLength = 1000;
export class FileBasedRecommendations extends ExtensionRecommendations {
private readonly fileOpenRecommendations: IStringDictionary<IFileOpenCondition[]>;
@@ -83,6 +87,7 @@ export class FileBasedRecommendations extends ExtensionRecommendations {
@IExtensionRecommendationNotificationService private readonly extensionRecommendationNotificationService: IExtensionRecommendationNotificationService,
@IExtensionIgnoredRecommendationsService private readonly extensionIgnoredRecommendationsService: IExtensionIgnoredRecommendationsService,
@IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService,
@IUntitledTextEditorService private readonly untitledTextEditorService: IUntitledTextEditorService,
) {
super();
this.fileOpenRecommendations = {};
@@ -155,6 +160,13 @@ export class FileBasedRecommendations extends ExtensionRecommendations {
let listenOnLanguageChange = false;
const languageId = model.getLanguageId();
// Allow language-specific recommendations for untitled files when language is auto-detected only when the file is large.
const untitledModel = this.untitledTextEditorService.get(uri);
const allowLanguageMatch =
!untitledModel ||
untitledModel.hasLanguageSetExplicitly ||
model.getValueLength() > untitledFileRecommendationsMinLength;
for (const [extensionId, conditions] of extensionRecommendationEntries) {
const conditionsByPattern: IFileOpenCondition[] = [];
const matchedConditions: IFileOpenCondition[] = [];
@@ -169,7 +181,7 @@ export class FileBasedRecommendations extends ExtensionRecommendations {
conditionsByPattern.push(condition);
}
if (isLanguageCondition) {
if (isLanguageCondition && allowLanguageMatch) {
if ((<IFileLanguageCondition>condition).languages.includes(languageId)) {
languageMatched = true;
}