提交 a49a4268 编写于 作者: R Ramya Achutha Rao

Explicit mapping for langs whose parent are emmet supported #28545

上级 4b2fcb84
...@@ -10,7 +10,7 @@ import parseStylesheet from '@emmetio/css-parser'; ...@@ -10,7 +10,7 @@ import parseStylesheet from '@emmetio/css-parser';
import parse from '@emmetio/html-matcher'; import parse from '@emmetio/html-matcher';
import Node from '@emmetio/node'; import Node from '@emmetio/node';
import { getSyntax, getProfile, getVariables, isStyleSheet, getNode, getInnerRange } from './util'; import { getSyntax, getProfile, getVariables, isStyleSheet, getNode, getInnerRange, getMappedModes } from './util';
import { DocumentStreamReader } from './bufferStream'; import { DocumentStreamReader } from './bufferStream';
const field = (index, placeholder) => `\${${index}${placeholder ? ':' + placeholder : ''}}`; const field = (index, placeholder) => `\${${index}${placeholder ? ':' + placeholder : ''}}`;
...@@ -42,17 +42,12 @@ export function expandAbbreviation() { ...@@ -42,17 +42,12 @@ export function expandAbbreviation() {
return; return;
} }
let syntax = getSyntax(editor.document); let syntax = getSyntax(editor.document);
let mappedSyntax = false; let mappedSyntax = getMappedModes()[syntax];
let emmetConfig = vscode.workspace.getConfiguration('emmet');
if (emmetConfig && emmetConfig['syntaxProfiles']) {
let syntaxProfiles = emmetConfig['syntaxProfiles'];
if (typeof syntaxProfiles[syntax] === 'string') {
syntax = syntaxProfiles[syntax];
mappedSyntax = true;
}
}
if (!mappedSyntax) { if (!mappedSyntax) {
syntax = syntaxHelper(syntax, editor.document, editor.selection.end); syntax = syntaxHelper(syntax, editor.document, editor.selection.end);
} else {
syntax = mappedSyntax;
} }
if (!syntax) { if (!syntax) {
return; return;
......
...@@ -15,23 +15,9 @@ import { mergeLines } from './mergeLines'; ...@@ -15,23 +15,9 @@ import { mergeLines } from './mergeLines';
import { toggleComment } from './toggleComment'; import { toggleComment } from './toggleComment';
import { fetchEditPoint } from './editPoint'; import { fetchEditPoint } from './editPoint';
import { fetchSelectItem } from './selectItem'; import { fetchSelectItem } from './selectItem';
import { updateExtensionsPath } from './util'; import { updateExtensionsPath, LANGUAGE_MODES, getMappedModes } from './util';
const LANGUAGE_MODES: Object = {
'html': ['!', '.', '}'],
'jade': ['!', '.', '}'],
'slim': ['!', '.', '}'],
'haml': ['!', '.', '}'],
'xml': ['.', '}'],
'xsl': ['.', '}'],
'javascriptreact': ['.'],
'typescriptreact': ['.'],
'css': [':'],
'scss': [':'],
'sass': [':'],
'less': [':'],
'stylus': [':']
};
export function activate(context: vscode.ExtensionContext) { export function activate(context: vscode.ExtensionContext) {
let completionProvider = new EmmetCompletionItemProvider(); let completionProvider = new EmmetCompletionItemProvider();
...@@ -41,16 +27,12 @@ export function activate(context: vscode.ExtensionContext) { ...@@ -41,16 +27,12 @@ export function activate(context: vscode.ExtensionContext) {
}); });
let completionProviderForMappedSyntax = new EmmetCompletionItemProvider(true); let completionProviderForMappedSyntax = new EmmetCompletionItemProvider(true);
let emmetConfig = vscode.workspace.getConfiguration('emmet'); let mappedModes = getMappedModes();
if (emmetConfig && emmetConfig['syntaxProfiles']) { Object.keys(mappedModes).forEach(syntax => {
let syntaxProfiles = emmetConfig['syntaxProfiles']; const provider = vscode.languages.registerCompletionItemProvider(syntax, completionProviderForMappedSyntax, ...LANGUAGE_MODES[mappedModes[syntax]]);
Object.keys(syntaxProfiles).forEach(syntax => { context.subscriptions.push(provider);
if (typeof syntaxProfiles[syntax] === 'string' && LANGUAGE_MODES[syntaxProfiles[syntax]]) { });
const provider = vscode.languages.registerCompletionItemProvider(syntax, completionProviderForMappedSyntax, ...LANGUAGE_MODES[syntaxProfiles[syntax]]);
context.subscriptions.push(provider);
}
});
}
context.subscriptions.push(vscode.commands.registerCommand('emmet.wrapWithAbbreviation', () => { context.subscriptions.push(vscode.commands.registerCommand('emmet.wrapWithAbbreviation', () => {
wrapWithAbbreviation(); wrapWithAbbreviation();
......
...@@ -13,6 +13,27 @@ import * as fs from 'fs'; ...@@ -13,6 +13,27 @@ import * as fs from 'fs';
let variablesFromFile = {}; let variablesFromFile = {};
let profilesFromFile = {}; let profilesFromFile = {};
let emmetExtensionsPath = ''; let emmetExtensionsPath = '';
export const LANGUAGE_MODES: Object = {
'html': ['!', '.', '}'],
'jade': ['!', '.', '}'],
'slim': ['!', '.', '}'],
'haml': ['!', '.', '}'],
'xml': ['.', '}'],
'xsl': ['.', '}'],
'javascriptreact': ['.'],
'typescriptreact': ['.'],
'css': [':'],
'scss': [':'],
'sass': [':'],
'less': [':'],
'stylus': [':']
};
// Explicitly map languages to their parent language to get emmet support
export const MAPPED_MODES: Object = {
'handlebars': 'html'
};
export function validate(allowStylesheet: boolean = true): boolean { export function validate(allowStylesheet: boolean = true): boolean {
let editor = vscode.window.activeTextEditor; let editor = vscode.window.activeTextEditor;
if (!editor) { if (!editor) {
...@@ -96,6 +117,18 @@ export function getVariables(): any { ...@@ -96,6 +117,18 @@ export function getVariables(): any {
return Object.assign({}, variablesFromFile, variablesFromSettings); return Object.assign({}, variablesFromFile, variablesFromSettings);
} }
export function getMappedModes(): any {
let finalMappedModes = {};
let syntaxProfileConfig = vscode.workspace.getConfiguration('emmet')['syntaxProfiles'];
let syntaxProfiles = Object.assign({}, MAPPED_MODES, syntaxProfileConfig ? syntaxProfileConfig : {});
Object.keys(syntaxProfiles).forEach(syntax => {
if (typeof syntaxProfiles[syntax] === 'string' && LANGUAGE_MODES[syntaxProfiles[syntax]]) {
finalMappedModes[syntax] = syntaxProfiles[syntax];
}
});
return finalMappedModes;
}
export function updateExtensionsPath() { export function updateExtensionsPath() {
let currentEmmetExtensionsPath = vscode.workspace.getConfiguration('emmet')['extensionsPath']; let currentEmmetExtensionsPath = vscode.workspace.getConfiguration('emmet')['extensionsPath'];
if (emmetExtensionsPath !== currentEmmetExtensionsPath) { if (emmetExtensionsPath !== currentEmmetExtensionsPath) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册