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