提交 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';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { grammarsExtPoint, ITMSyntaxExtensionPoint } from 'vs/editor/node/textMate/TMGrammars';
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 { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IExtensionService, ExtensionPointContribution } from 'vs/platform/extensions/common/extensions';
......@@ -69,10 +69,13 @@ class LazyEmmet {
private static snippetsFromFile = {};
private static syntaxProfilesFromFile = {};
private static preferencesFromFile = {};
private static workspaceRoot = '';
public static withConfiguredEmmet(configurationService: IConfigurationService,
messageService: IMessageService,
workspaceRoot: string,
callback: (_emmet: typeof emmet) => void): TPromise<void> {
LazyEmmet.workspaceRoot = workspaceRoot;
return LazyEmmet._INSTANCE.withEmmetPreferences(configurationService, messageService, callback);
}
......@@ -133,11 +136,15 @@ class LazyEmmet {
LazyEmmet.syntaxProfilesFromFile = {};
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) {
let snippetsPromise = this.getEmmetCustomization('snippets.json').then(value => LazyEmmet.snippetsFromFile = value);
let profilesPromise = this.getEmmetCustomization('syntaxProfiles.json').then(value => LazyEmmet.syntaxProfilesFromFile = value);
let preferencesPromise = this.getEmmetCustomization('preferences.json').then(value => LazyEmmet.preferencesFromFile = value);
let snippetsPromise = this.getEmmetCustomization(snippetsPath).then(value => LazyEmmet.snippetsFromFile = value);
let profilesPromise = this.getEmmetCustomization(syntaxProfilesPath).then(value => LazyEmmet.syntaxProfilesFromFile = value);
let preferencesPromise = this.getEmmetCustomization(preferencesPath).then(value => LazyEmmet.preferencesFromFile = value);
return TPromise.join([snippetsPromise, profilesPromise, preferencesPromise]);
}
......@@ -148,8 +155,7 @@ class LazyEmmet {
return TPromise.as(void 0);
}
private getEmmetCustomization(fileName: string): TPromise<any> {
let filePath = path.join(LazyEmmet.extensionsPath, fileName);
private getEmmetCustomization(filePath: string): TPromise<any> {
return pfs.fileExists(filePath).then(fileExists => {
if (fileExists) {
return pfs.readFile(filePath).then(buff => {
......@@ -162,7 +168,6 @@ class LazyEmmet {
return parsedData;
});
}
this._messageService.show(Severity.Error, `The file "${filePath}" from emmet.extensionsPath does not exist.`);
return {};
});
}
......@@ -216,6 +221,8 @@ export abstract class EmmetEditorAction extends EditorAction {
const extensionService = accessor.get(IExtensionService);
const modeService = accessor.get(IModeService);
const messageService = accessor.get(IMessageService);
const contextService = accessor.get(IWorkspaceContextService);
const workspaceRoot = contextService.getWorkspace() ? contextService.getWorkspace().resource.fsPath : '';
return this._withGrammarContributions(extensionService).then((grammarContributions) => {
......@@ -232,7 +239,7 @@ export abstract class EmmetEditorAction extends EditorAction {
return;
}
return LazyEmmet.withConfiguredEmmet(configurationService, messageService, (_emmet) => {
return LazyEmmet.withConfiguredEmmet(configurationService, messageService, workspaceRoot, (_emmet) => {
editorAccessor.onBeforeEmmetAction();
instantiationService.invokeFunction((accessor) => {
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.
先完成此消息的编辑!
想要评论请 注册