本文整理汇总了TypeScript中vscode.languages.registerDocumentHighlightProvider方法的典型用法代码示例。如果您正苦于以下问题:TypeScript languages.registerDocumentHighlightProvider方法的具体用法?TypeScript languages.registerDocumentHighlightProvider怎么用?TypeScript languages.registerDocumentHighlightProvider使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vscode.languages
的用法示例。
在下文中一共展示了languages.registerDocumentHighlightProvider方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: activate
export function activate(context: vscode.ExtensionContext) {
let documentSelector: vscode.DocumentSelector = {
language: 'blade',
scheme: 'file'
};
context.subscriptions.push(vscode.languages.registerDocumentHighlightProvider(documentSelector, new DocumentHighlight));
let bladeFormatCfg = vscode.workspace.getConfiguration('blade.format');
if (bladeFormatCfg.get<boolean>('enable')) {
context.subscriptions.push(vscode.languages.registerDocumentFormattingEditProvider(documentSelector, new BladeFormattingEditProvider));
context.subscriptions.push(vscode.languages.registerDocumentRangeFormattingEditProvider(documentSelector, new BladeFormattingEditProvider));
}
// Set html indent
const EMPTY_ELEMENTS: string[] = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'];
vscode.languages.setLanguageConfiguration('blade', {
indentationRules: {
increaseIndentPattern: /<(?!\?|(?:area|base|br|col|frame|hr|html|img|input|link|meta|param)\b|[^>]*\/>)([-_\.A-Za-z0-9]+)(?=\s|>)\b[^>]*>(?!.*<\/\1>)|<!--(?!.*-->)|\{[^}"']*$/,
decreaseIndentPattern: /^\s*(<\/(?!html)[-_\.A-Za-z0-9]+\b[^>]*>|-->|\})/
},
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
onEnterRules: [
{
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
action: { indentAction: vscode.IndentAction.IndentOutdent }
},
{
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
action: { indentAction: vscode.IndentAction.Indent }
}
],
});
// The server is implemented in node
let serverModule = context.asAbsolutePath(path.join('server', 'out', 'htmlServerMain.js'));
// The debug options for the server
let debugOptions = { execArgv: ['--nolazy', '--inspect=6045'] };
// If the extension is launch in debug mode the debug server options are use
// Otherwise the run options are used
let serverOptions: ServerOptions = {
run: { module: serverModule, transport: TransportKind.ipc },
debug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions }
};
let embeddedLanguages = { css: true, javascript: true };
// Options to control the language client
let clientOptions: LanguageClientOptions = {
documentSelector:[
{ language: 'blade', scheme: 'file' }
],
synchronize: {
configurationSection: ['blade', 'css', 'javascript', 'emmet'], // the settings to synchronize
},
initializationOptions: {
embeddedLanguages
}
};
// Create the language client and start the client.
let client = new LanguageClient('blade', localize('bladeserver.name', 'BLADE Language Server'), serverOptions, clientOptions);
client.registerProposedFeatures();
context.subscriptions.push(client.start());
}
示例2: registerHighlightProvider
function registerHighlightProvider(ctx: ExtensionContext) {
// highlight provider
let pairedEnds = [];
const getEnd = function (line) {
//end must be on a line by itself, or followed directly by a dot
let match = line.text.match(/^(\s*)end\b[\.\s#]?\s*$/);
if (match) {
return new vscode.Range(line.lineNumber, match[1].length, line.lineNumber, match[1].length + 3);
}
}
const getEntry = function(line) {
//only lines that start with the entry
let match = line.text.match(/^(\s*)(begin|class|def|for|if|module|unless|until|case|while)\b[^\{;]*$/);
if (match) {
return new vscode.Range(line.lineNumber, match[1].length, line.lineNumber, match[1].length + match[2].length);
} else {
//check for do
match = line.text.match(/\b(do)\b\s*(\|.*\|[^;]*)?$/);
if (match) {
return new vscode.Range(line.lineNumber, match.index, line.lineNumber, match.index + 2);
}
}
}
const balancePairs = function (doc) {
pairedEnds = [];
if (doc.languageId !== 'ruby') return;
let waitingEntries = [];
let entry, end;
for (let i = 0; i < doc.lineCount; i++) {
if ((entry = getEntry(doc.lineAt(i)))) {
waitingEntries.push(entry);
} else if (waitingEntries.length && (end = getEnd(doc.lineAt(i)))) {
pairedEnds.push({
entry: waitingEntries.pop(),
end: end
});
}
}
}
const balanceEvent = function (event) {
if (event && event.document) balancePairs(event.document);
}
ctx.subscriptions.push(vscode.languages.registerDocumentHighlightProvider('ruby', {
provideDocumentHighlights: (doc, pos) => {
let result = pairedEnds.find(pair => (
pair.entry.start.line === pos.line ||
pair.end.start.line === pos.line));
if (result) {
return [new vscode.DocumentHighlight(result.entry, 2), new vscode.DocumentHighlight(result.end, 2)];
}
}
}));
ctx.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(balanceEvent));
ctx.subscriptions.push(vscode.workspace.onDidChangeTextDocument(balanceEvent));
ctx.subscriptions.push(vscode.workspace.onDidOpenTextDocument(balancePairs));
if (vscode.window && vscode.window.activeTextEditor) {
balancePairs(vscode.window.activeTextEditor.document);
}
}
示例3: WorkspaceSymbolProvider
this.description.modeIds.forEach(modeId => {
let selector: DocumentFilter = { scheme: 'file', language: modeId };
languages.registerCompletionItemProvider(selector, this.completionItemProvider, '.');
languages.registerHoverProvider(selector, hoverProvider);
languages.registerDefinitionProvider(selector, definitionProvider);
languages.registerDocumentHighlightProvider(selector, documentHighlightProvider);
languages.registerReferenceProvider(selector, referenceProvider);
languages.registerDocumentSymbolProvider(selector, documentSymbolProvider);
languages.registerSignatureHelpProvider(selector, signatureHelpProvider, '(', ',');
languages.registerRenameProvider(selector, renameProvider);
languages.registerDocumentRangeFormattingEditProvider(selector, this.formattingProvider);
languages.registerOnTypeFormattingEditProvider(selector, this.formattingProvider, ';', '}', '\n');
languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(client, modeId));
languages.setLanguageConfiguration(modeId, {
indentationRules: {
// ^(.*\*/)?\s*\}.*$
decreaseIndentPattern: /^(.*\*\/)?\s*\}.*$/,
// ^.*\{[^}"']*$
increaseIndentPattern: /^.*\{[^}"']*$/
},
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
comments: {
lineComment: '//',
blockComment: ['/*', '*/']
},
brackets: [
['{', '}'],
['[', ']'],
['(', ')'],
],
onEnterRules: [
{
// e.g. /** | */
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
afterText: /^\s*\*\/$/,
action: { indentAction: IndentAction.IndentOutdent, appendText: ' * ' }
},
{
// e.g. /** ...|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
action: { indentAction: IndentAction.None, appendText: ' * ' }
},
{
// e.g. * ...|
beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
action: { indentAction: IndentAction.None, appendText: '* ' }
},
{
// e.g. */|
beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/,
action: { indentAction: IndentAction.None, removeText: 1 }
},
{
// e.g. *-----*/|
beforeText: /^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/,
action: { indentAction: IndentAction.None, removeText: 1 }
}
],
__electricCharacterSupport: {
docComment: { scope: 'comment.documentation', open: '/**', lineStart: ' * ', close: ' */' }
},
autoClosingPairs: [
{ open: '{', close: '}' },
{ open: '[', close: ']' },
{ open: '(', close: ')' },
{ open: '"', close: '"', notIn: ['string'] },
{ open: '\'', close: '\'', notIn: ['string', 'comment'] },
{ open: '`', close: '`', notIn: ['string', 'comment'] }
]
});
});
示例4: registerSupports
function registerSupports(modeID: string, host: TypeScriptServiceClientHost, client: TypeScriptServiceClient) {
languages.registerHoverProvider(modeID, new HoverProvider(client));
languages.registerDefinitionProvider(modeID, new DefinitionProvider(client));
languages.registerDocumentHighlightProvider(modeID, new DocumentHighlightProvider(client));
languages.registerReferenceProvider(modeID, new ReferenceProvider(client));
languages.registerDocumentSymbolProvider(modeID, new DocumentSymbolProvider(client));
languages.registerSignatureHelpProvider(modeID, new SignatureHelpProvider(client), '(', ',');
languages.registerRenameProvider(modeID, new RenameProvider(client));
languages.registerDocumentRangeFormattingEditProvider(modeID, new FormattingProvider(client));
languages.registerOnTypeFormattingEditProvider(modeID, new FormattingProvider(client), ';', '}', '\n');
languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(client, modeID));
languages.setLanguageConfiguration(modeID, {
indentationRules: {
// ^(.*\*/)?\s*\}.*$
decreaseIndentPattern: /^(.*\*\/)?\s*\}.*$/,
// ^.*\{[^}"']*$
increaseIndentPattern: /^.*\{[^}"']*$/
},
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
comments: {
lineComment: '//',
blockComment: ['/*', '*/']
},
brackets: [
['{', '}'],
['[', ']'],
['(', ')'],
],
onEnterRules: [
{
// e.g. /** | */
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
afterText: /^\s*\*\/$/,
action: { indentAction: IndentAction.IndentOutdent, appendText: ' * ' }
},
{
// e.g. /** ...|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
action: { indentAction: IndentAction.None, appendText: ' * ' }
},
{
// e.g. * ...|
beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
action: { indentAction: IndentAction.None, appendText: '* ' }
},
{
// e.g. */|
beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/,
action: { indentAction: IndentAction.None, removeText: 1 }
}
],
__electricCharacterSupport: {
docComment: { scope: 'comment.documentation', open: '/**', lineStart: ' * ', close: ' */' }
},
__characterPairSupport: {
autoClosingPairs: [
{ open: '{', close: '}' },
{ open: '[', close: ']' },
{ open: '(', close: ')' },
{ open: '"', close: '"', notIn: ['string'] },
{ open: '\'', close: '\'', notIn: ['string', 'comment'] },
{ open: '`', close: '`', notIn: ['string', 'comment'] }
]
}
});
host.addBufferSyncSupport(new BufferSyncSupport(client, modeID));
// Register suggest support as soon as possible and load configuration lazily
let completionItemProvider = new CompletionItemProvider(client);
languages.registerCompletionItemProvider(modeID, completionItemProvider, '.');
let reloadConfig = () => {
completionItemProvider.setConfiguration(Configuration.load(modeID));
};
workspace.onDidChangeConfiguration(() => {
reloadConfig();
});
reloadConfig();
}
示例5: activate
//.........这里部分代码省略.........
analysisCompleteEvents.dispose();
}
});
// Set up providers.
// TODO: Do we need to push all these to subscriptions?!
const hoverProvider = new DartHoverProvider(analyzer);
const formattingEditProvider = new DartFormattingEditProvider(analyzer, extContext);
context.subscriptions.push(formattingEditProvider);
const completionItemProvider = new DartCompletionItemProvider(analyzer);
const referenceProvider = new DartReferenceProvider(analyzer);
const documentHighlightProvider = new DartDocumentHighlightProvider(analyzer);
const sourceCodeActionProvider = new SourceCodeActionProvider();
const renameProvider = new DartRenameProvider(analyzer);
const implementationProvider = new DartImplementationProvider(analyzer);
const activeFileFilters = [DART_MODE];
if (config.analyzeAngularTemplates && analyzer.capabilities.supportsAnalyzingHtmlFiles) {
// Analyze Angular2 templates, requires the angular_analyzer_plugin.
activeFileFilters.push(HTML_MODE);
}
// This is registered with VS Code further down, so it's metadata can be collected from all
// registered providers.
const rankingCodeActionProvider = new RankingCodeActionProvider();
const triggerCharacters = ".(${'\"/\\".split("");
context.subscriptions.push(vs.languages.registerHoverProvider(activeFileFilters, hoverProvider));
formattingEditProvider.registerDocumentFormatter(activeFileFilters);
context.subscriptions.push(vs.languages.registerCompletionItemProvider(activeFileFilters, completionItemProvider, ...triggerCharacters));
context.subscriptions.push(vs.languages.registerDefinitionProvider(activeFileFilters, referenceProvider));
context.subscriptions.push(vs.languages.registerReferenceProvider(activeFileFilters, referenceProvider));
context.subscriptions.push(vs.languages.registerDocumentHighlightProvider(activeFileFilters, documentHighlightProvider));
rankingCodeActionProvider.registerProvider(new AssistCodeActionProvider(activeFileFilters, analyzer));
rankingCodeActionProvider.registerProvider(new FixCodeActionProvider(activeFileFilters, analyzer));
rankingCodeActionProvider.registerProvider(new RefactorCodeActionProvider(activeFileFilters, analyzer));
context.subscriptions.push(vs.languages.registerRenameProvider(activeFileFilters, renameProvider));
// Some actions only apply to Dart.
formattingEditProvider.registerTypingFormatter(DART_MODE, "}", ";");
context.subscriptions.push(vs.languages.registerCodeActionsProvider(DART_MODE, sourceCodeActionProvider, sourceCodeActionProvider.metadata));
rankingCodeActionProvider.registerProvider(new IgnoreLintCodeActionProvider(activeFileFilters));
context.subscriptions.push(vs.languages.registerImplementationProvider(DART_MODE, implementationProvider));
if (config.showTestCodeLens) {
const codeLensProvider = new TestCodeLensProvider(analyzer);
context.subscriptions.push(codeLensProvider);
context.subscriptions.push(vs.languages.registerCodeLensProvider(DART_MODE, codeLensProvider));
}
// Register the ranking provider from VS Code now that it has all of its delegates.
context.subscriptions.push(vs.languages.registerCodeActionsProvider(activeFileFilters, rankingCodeActionProvider, rankingCodeActionProvider.metadata));
// Task handlers.
if (config.previewBuildRunnerTasks) {
context.subscriptions.push(vs.tasks.registerTaskProvider("pub", new PubBuildRunnerTaskProvider(sdks)));
}
// Snippets are language-specific
context.subscriptions.push(vs.languages.registerCompletionItemProvider(DART_MODE, new SnippetCompletionItemProvider("snippets/dart.json", (_) => true)));
context.subscriptions.push(vs.languages.registerCompletionItemProvider(DART_MODE, new SnippetCompletionItemProvider("snippets/flutter.json", (uri) => util.isInsideFlutterProject(uri))));
context.subscriptions.push(vs.languages.setLanguageConfiguration(DART_MODE.language, new DartLanguageConfiguration()));
const statusReporter = new AnalyzerStatusReporter(analyzer, workspaceContext, analytics);
示例6: WorkspaceSymbolProvider
this.description.modeIds.forEach(modeId => {
const selector: DocumentFilter = modeId;
languages.registerCompletionItemProvider(selector, this.completionItemProvider, '.');
languages.registerHoverProvider(selector, hoverProvider);
languages.registerDefinitionProvider(selector, definitionProvider);
if (client.apiVersion.has220Features()) {
// TODO: TS 2.1.5 returns incorrect results for implementation locations.
languages.registerImplementationProvider(selector, implementationProvider);
}
if (client.apiVersion.has213Features()) {
languages.registerTypeDefinitionProvider(selector, typeDefinitionProvider);
}
languages.registerDocumentHighlightProvider(selector, documentHighlightProvider);
languages.registerReferenceProvider(selector, referenceProvider);
languages.registerDocumentSymbolProvider(selector, documentSymbolProvider);
languages.registerSignatureHelpProvider(selector, signatureHelpProvider, '(', ',');
languages.registerRenameProvider(selector, renameProvider);
languages.registerOnTypeFormattingEditProvider(selector, this.formattingProvider, ';', '}', '\n');
languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(client, modeId));
if (client.apiVersion.has213Features()) {
languages.registerCodeActionsProvider(selector, new CodeActionProvider(client, modeId));
}
languages.setLanguageConfiguration(modeId, {
indentationRules: {
// ^(.*\*/)?\s*\}.*$
decreaseIndentPattern: /^(.*\*\/)?\s*\}.*$/,
// ^.*\{[^}"']*$
increaseIndentPattern: /^.*\{[^}"']*$/
},
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
onEnterRules: [
{
// e.g. /** | */
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
afterText: /^\s*\*\/$/,
action: { indentAction: IndentAction.IndentOutdent, appendText: ' * ' }
},
{
// e.g. /** ...|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
action: { indentAction: IndentAction.None, appendText: ' * ' }
},
{
// e.g. * ...|
beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
action: { indentAction: IndentAction.None, appendText: '* ' }
},
{
// e.g. */|
beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/,
action: { indentAction: IndentAction.None, removeText: 1 }
},
{
// e.g. *-----*/|
beforeText: /^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/,
action: { indentAction: IndentAction.None, removeText: 1 }
}
]
});
const EMPTY_ELEMENTS: string[] = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'];
languages.setLanguageConfiguration('jsx-tags', {
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
onEnterRules: [
{
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
action: { indentAction: IndentAction.IndentOutdent }
},
{
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
action: { indentAction: IndentAction.Indent }
}
],
});
});
示例7: activate
//.........这里部分代码省略.........
if (/^[A-Za-z_0-9']+$/.test(type)) {
let [status, result] = await session.request(['type', 'enclosing', 'at', fromVsPos(position)]);
if (token.isCancellationRequested) return null;
if (!(status !== 'return' || result.length <= 0)) {
start = result[0].start;
end = result[0].end;
type = result[0].type;
}
}
if (type.includes('\n')) {
let lines = type.split(/\n/g);
if (lines.length > 6) {
let end = lines.pop();
lines = lines.slice(0, 5);
lines.push(' (* ... *)');
lines.push(end);
}
type = lines.join('\n');
}
if (/^sig\b/.test(type)) {
type = `module type _ = ${type}`;
} else if (!/^type\b/.test(type)) {
type = `type _ = ${type}`;
}
return new vscode.Hover({ language: 'ocaml', value: type }, toVsRange(start, end));
}
})
);
context.subscriptions.push(
vscode.languages.registerDocumentHighlightProvider(ocamlLang, {
async provideDocumentHighlights(document, position, token) {
await session.syncBuffer(document.fileName, document.getText(), token);
if (token.isCancellationRequested) return null;
let [status, result] = await session.request(['occurrences', 'ident', 'at', fromVsPos(position)]);
if (token.isCancellationRequested) return null;
if (status !== 'return' || result.length <= 0) return;
return result.map((item) => {
return new vscode.DocumentHighlight(toVsRange(item.start, item.end));
});
}
})
);
context.subscriptions.push(
vscode.languages.registerRenameProvider(ocamlLang, {
async provideRenameEdits(document, position, newName, token) {
await session.syncBuffer(document.fileName, document.getText(), token);
if (token.isCancellationRequested) return null;
let [status, result] = await session.request(['occurrences', 'ident', 'at', fromVsPos(position)]);
if (token.isCancellationRequested) return null;
if (status !== 'return' || result.length <= 0) return;
let edits = result.map((item) => {
return new vscode.TextEdit(toVsRange(item.start, item.end), newName);
});
let edit = new vscode.WorkspaceEdit();