提交 6d8617eb 编写于 作者: R Ramya Rao 提交者: GitHub

Support workspace relative emmet ext path (#19408)

上级 acc4c444
...@@ -12,7 +12,7 @@ import { ICommandKeybindingsOptions } from 'vs/editor/common/config/config'; ...@@ -12,7 +12,7 @@ import { ICommandKeybindingsOptions } from 'vs/editor/common/config/config';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { grammarsExtPoint, ITMSyntaxExtensionPoint } from 'vs/editor/node/textMate/TMGrammars'; import { grammarsExtPoint, ITMSyntaxExtensionPoint } from 'vs/editor/node/textMate/TMGrammars';
import { IModeService } from 'vs/editor/common/services/modeService'; import { IModeService } from 'vs/editor/common/services/modeService';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { EditorAccessor, IGrammarContributions } from 'vs/workbench/parts/emmet/node/editorAccessor'; import { EditorAccessor, IGrammarContributions } from 'vs/workbench/parts/emmet/node/editorAccessor';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IExtensionService, ExtensionPointContribution } from 'vs/platform/extensions/common/extensions'; import { IExtensionService, ExtensionPointContribution } from 'vs/platform/extensions/common/extensions';
...@@ -69,10 +69,13 @@ class LazyEmmet { ...@@ -69,10 +69,13 @@ class LazyEmmet {
private static snippetsFromFile = {}; private static snippetsFromFile = {};
private static syntaxProfilesFromFile = {}; private static syntaxProfilesFromFile = {};
private static preferencesFromFile = {}; private static preferencesFromFile = {};
private static workspaceRoot = '';
public static withConfiguredEmmet(configurationService: IConfigurationService, public static withConfiguredEmmet(configurationService: IConfigurationService,
messageService: IMessageService, messageService: IMessageService,
workspaceRoot: string,
callback: (_emmet: typeof emmet) => void): TPromise<void> { callback: (_emmet: typeof emmet) => void): TPromise<void> {
LazyEmmet.workspaceRoot = workspaceRoot;
return LazyEmmet._INSTANCE.withEmmetPreferences(configurationService, messageService, callback); return LazyEmmet._INSTANCE.withEmmetPreferences(configurationService, messageService, callback);
} }
...@@ -133,11 +136,15 @@ class LazyEmmet { ...@@ -133,11 +136,15 @@ class LazyEmmet {
LazyEmmet.syntaxProfilesFromFile = {}; LazyEmmet.syntaxProfilesFromFile = {};
if (extPath && extPath.trim()) { if (extPath && extPath.trim()) {
return pfs.dirExists(LazyEmmet.extensionsPath).then(exists => { let dirPath = path.isAbsolute(extPath) ? extPath : path.join(LazyEmmet.workspaceRoot, extPath);
let snippetsPath = path.join(dirPath, 'snippets.json');
let syntaxProfilesPath = path.join(dirPath, 'syntaxProfiles.json');
let preferencesPath = path.join(dirPath, 'preferences.json');
return pfs.dirExists(dirPath).then(exists => {
if (exists) { if (exists) {
let snippetsPromise = this.getEmmetCustomization('snippets.json').then(value => LazyEmmet.snippetsFromFile = value); let snippetsPromise = this.getEmmetCustomization(snippetsPath).then(value => LazyEmmet.snippetsFromFile = value);
let profilesPromise = this.getEmmetCustomization('syntaxProfiles.json').then(value => LazyEmmet.syntaxProfilesFromFile = value); let profilesPromise = this.getEmmetCustomization(syntaxProfilesPath).then(value => LazyEmmet.syntaxProfilesFromFile = value);
let preferencesPromise = this.getEmmetCustomization('preferences.json').then(value => LazyEmmet.preferencesFromFile = value); let preferencesPromise = this.getEmmetCustomization(preferencesPath).then(value => LazyEmmet.preferencesFromFile = value);
return TPromise.join([snippetsPromise, profilesPromise, preferencesPromise]); return TPromise.join([snippetsPromise, profilesPromise, preferencesPromise]);
} }
...@@ -148,8 +155,7 @@ class LazyEmmet { ...@@ -148,8 +155,7 @@ class LazyEmmet {
return TPromise.as(void 0); return TPromise.as(void 0);
} }
private getEmmetCustomization(fileName: string): TPromise<any> { private getEmmetCustomization(filePath: string): TPromise<any> {
let filePath = path.join(LazyEmmet.extensionsPath, fileName);
return pfs.fileExists(filePath).then(fileExists => { return pfs.fileExists(filePath).then(fileExists => {
if (fileExists) { if (fileExists) {
return pfs.readFile(filePath).then(buff => { return pfs.readFile(filePath).then(buff => {
...@@ -162,7 +168,6 @@ class LazyEmmet { ...@@ -162,7 +168,6 @@ class LazyEmmet {
return parsedData; return parsedData;
}); });
} }
this._messageService.show(Severity.Error, `The file "${filePath}" from emmet.extensionsPath does not exist.`);
return {}; return {};
}); });
} }
...@@ -216,6 +221,8 @@ export abstract class EmmetEditorAction extends EditorAction { ...@@ -216,6 +221,8 @@ export abstract class EmmetEditorAction extends EditorAction {
const extensionService = accessor.get(IExtensionService); const extensionService = accessor.get(IExtensionService);
const modeService = accessor.get(IModeService); const modeService = accessor.get(IModeService);
const messageService = accessor.get(IMessageService); const messageService = accessor.get(IMessageService);
const contextService = accessor.get(IWorkspaceContextService);
const workspaceRoot = contextService.getWorkspace() ? contextService.getWorkspace().resource.fsPath : '';
return this._withGrammarContributions(extensionService).then((grammarContributions) => { return this._withGrammarContributions(extensionService).then((grammarContributions) => {
...@@ -232,7 +239,7 @@ export abstract class EmmetEditorAction extends EditorAction { ...@@ -232,7 +239,7 @@ export abstract class EmmetEditorAction extends EditorAction {
return; return;
} }
return LazyEmmet.withConfiguredEmmet(configurationService, messageService, (_emmet) => { return LazyEmmet.withConfiguredEmmet(configurationService, messageService, workspaceRoot, (_emmet) => {
editorAccessor.onBeforeEmmetAction(); editorAccessor.onBeforeEmmetAction();
instantiationService.invokeFunction((accessor) => { instantiationService.invokeFunction((accessor) => {
this.runEmmetAction(accessor, new EmmetActionContext(editor, _emmet, editorAccessor)); this.runEmmetAction(accessor, new EmmetActionContext(editor, _emmet, editorAccessor));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册