本文整理汇总了TypeScript中vscode.languages.registerOnTypeFormattingEditProvider方法的典型用法代码示例。如果您正苦于以下问题:TypeScript languages.registerOnTypeFormattingEditProvider方法的具体用法?TypeScript languages.registerOnTypeFormattingEditProvider怎么用?TypeScript languages.registerOnTypeFormattingEditProvider使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vscode.languages
的用法示例。
在下文中一共展示了languages.registerOnTypeFormattingEditProvider方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: CompositeDisposable
disposables.add(server.onServerStart(() => {
// register language feature provider on start
localDisposables = new CompositeDisposable();
const definitionMetadataDocumentProvider = new DefinitionMetadataDocumentProvider();
definitionMetadataDocumentProvider.register();
localDisposables.add(definitionMetadataDocumentProvider);
const definitionProvider = new DefinitionProvider(server, definitionMetadataDocumentProvider);
localDisposables.add(vscode.languages.registerDefinitionProvider(documentSelector, definitionProvider));
localDisposables.add(vscode.languages.registerDefinitionProvider({ scheme: definitionMetadataDocumentProvider.scheme }, definitionProvider));
localDisposables.add(vscode.languages.registerImplementationProvider(documentSelector, new ImplementationProvider(server)));
const testManager = new TestManager(server, eventStream);
localDisposables.add(testManager);
localDisposables.add(vscode.languages.registerCodeLensProvider(documentSelector, new CodeLensProvider(server, testManager, optionProvider)));
localDisposables.add(vscode.languages.registerDocumentHighlightProvider(documentSelector, new DocumentHighlightProvider(server)));
localDisposables.add(vscode.languages.registerDocumentSymbolProvider(documentSelector, new DocumentSymbolProvider(server)));
localDisposables.add(vscode.languages.registerReferenceProvider(documentSelector, new ReferenceProvider(server)));
localDisposables.add(vscode.languages.registerHoverProvider(documentSelector, new HoverProvider(server)));
localDisposables.add(vscode.languages.registerRenameProvider(documentSelector, new RenameProvider(server)));
if (options.useFormatting) {
localDisposables.add(vscode.languages.registerDocumentRangeFormattingEditProvider(documentSelector, new FormatProvider(server)));
localDisposables.add(vscode.languages.registerOnTypeFormattingEditProvider(documentSelector, new FormatProvider(server), '}', ';'));
}
localDisposables.add(vscode.languages.registerCompletionItemProvider(documentSelector, new CompletionItemProvider(server), '.', ' '));
localDisposables.add(vscode.languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(server, optionProvider)));
localDisposables.add(vscode.languages.registerSignatureHelpProvider(documentSelector, new SignatureHelpProvider(server), '(', ','));
const codeActionProvider = new CodeActionProvider(server, optionProvider);
localDisposables.add(codeActionProvider);
localDisposables.add(vscode.languages.registerCodeActionsProvider(documentSelector, codeActionProvider));
localDisposables.add(reportDiagnostics(server, advisor));
localDisposables.add(forwardChanges(server));
localDisposables.add(trackVirtualDocuments(server, eventStream));
localDisposables.add(vscode.languages.registerFoldingRangeProvider(documentSelector, new StructureProvider(server)));
}));
示例2: DefinitionMetadataDocumentProvider
disposables.push(server.onServerStart(() => {
// register language feature provider on start
const definitionMetadataDocumentProvider = new DefinitionMetadataDocumentProvider();
definitionMetadataDocumentProvider.register();
localDisposables.push(definitionMetadataDocumentProvider);
localDisposables.push(vscode.languages.registerDefinitionProvider(documentSelector, new DefinitionProvider(server, definitionMetadataDocumentProvider)));
localDisposables.push(vscode.languages.registerImplementationProvider(documentSelector, new ImplementationProvider(server)));
localDisposables.push(vscode.languages.registerCodeLensProvider(documentSelector, new CodeLensProvider(server)));
localDisposables.push(vscode.languages.registerDocumentHighlightProvider(documentSelector, new DocumentHighlightProvider(server)));
localDisposables.push(vscode.languages.registerDocumentSymbolProvider(documentSelector, new DocumentSymbolProvider(server)));
localDisposables.push(vscode.languages.registerReferenceProvider(documentSelector, new ReferenceProvider(server)));
localDisposables.push(vscode.languages.registerHoverProvider(documentSelector, new HoverProvider(server)));
localDisposables.push(vscode.languages.registerRenameProvider(documentSelector, new RenameProvider(server)));
localDisposables.push(vscode.languages.registerDocumentRangeFormattingEditProvider(documentSelector, new FormatProvider(server)));
localDisposables.push(vscode.languages.registerOnTypeFormattingEditProvider(documentSelector, new FormatProvider(server), '}', ';'));
localDisposables.push(vscode.languages.registerCompletionItemProvider(documentSelector, new CompletionItemProvider(server), '.', '<'));
localDisposables.push(vscode.languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(server)));
localDisposables.push(vscode.languages.registerSignatureHelpProvider(documentSelector, new SignatureHelpProvider(server), '(', ','));
const codeActionProvider = new CodeActionProvider(server);
localDisposables.push(codeActionProvider);
localDisposables.push(vscode.languages.registerCodeActionsProvider(documentSelector, codeActionProvider));
localDisposables.push(reportDiagnostics(server, advisor));
localDisposables.push(forwardChanges(server));
}));
示例3: ConfigurationDependentRegistration
return new ConfigurationDependentRegistration(modeId, 'format.enable', () => {
const formattingProvider = new TypeScriptFormattingProvider(client, fileConfigurationManager);
return vscode.Disposable.from(
vscode.languages.registerOnTypeFormattingEditProvider(selector, formattingProvider, ';', '}', '\n'),
vscode.languages.registerDocumentRangeFormattingEditProvider(selector, formattingProvider),
);
});
示例4: 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.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 }
}
]
});
});
示例5: activate
export function activate(context: ExtensionContext) {
console.log('Activating vscode-format');
// Set the document filter to files
let docFilter: DocumentFilter = { scheme: 'file' };
// Register the format provider
context.subscriptions.push(languages.registerDocumentFormattingEditProvider(docFilter, new DocumentFormat()));
// Register the onType format provider
context.subscriptions.push(languages.registerOnTypeFormattingEditProvider(docFilter, new DocumentTypeFormat(), '\n', '\r\n', ';'));
// context.subscriptions.push(commands.registerCommand('format.workspace', function () {
// workspace.findFiles('**/*.*', '').then();
// }));
}
示例6: 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.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: WorkspaceSymbolProvider
this.description.modeIds.forEach(modeId => {
languages.registerCompletionItemProvider(modeId, this.completionItemProvider, '.');
languages.registerHoverProvider(modeId, hoverProvider);
languages.registerDefinitionProvider(modeId, definitionProvider);
languages.registerDocumentHighlightProvider(modeId, documentHighlightProvider);
languages.registerReferenceProvider(modeId, referenceProvider);
languages.registerDocumentSymbolProvider(modeId, documentSymbolProvider);
languages.registerSignatureHelpProvider(modeId, signatureHelpProvider, '(', ',');
languages.registerRenameProvider(modeId, renameProvider);
languages.registerDocumentRangeFormattingEditProvider(modeId, this.formattingProvider);
languages.registerOnTypeFormattingEditProvider(modeId, 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 }
}
],
__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'] }
]
}
});
});
示例8: 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();
}
示例9: activate
export function activate(context: vscode.ExtensionContext) {
let session = new OCamlMerlinSession();
let toVsPos = (pos) => {
return new vscode.Position(pos.line - 1, pos.col);
};
let fromVsPos = (pos: vscode.Position) => {
return { line: pos.line + 1, col: pos.character };
};
let toVsRange = (start, end) => {
return new vscode.Range(toVsPos(start), toVsPos(end));
};
context.subscriptions.push(
vscode.languages.setLanguageConfiguration('ocaml', {
indentationRules: {
increaseIndentPattern: /^\s*(type|let)\s[^=]*=\s*$|\b(do|begin|struct|sig)\s*$/,
decreaseIndentPattern: /\b(done|end)\s*$/,
}
})
);
context.subscriptions.push(session);
context.subscriptions.push(
vscode.languages.registerDocumentFormattingEditProvider(ocamlLang, {
provideDocumentFormattingEdits(document, options, token) {
return doOcpIndent(document.getText(), token);
}
})
);
context.subscriptions.push(
vscode.languages.registerDocumentRangeFormattingEditProvider(ocamlLang, {
provideDocumentRangeFormattingEdits(document, range, options, token) {
return doOcpIndent(document.getText(), token, range);
}
})
);
context.subscriptions.push(
vscode.languages.registerOnTypeFormattingEditProvider(ocamlLang, {
async provideOnTypeFormattingEdits(document, position, ch, options, token) {
let isEndAt = (word) => {
let wordRange = document.getWordRangeAtPosition(position);
return wordRange.end.isEqual(position) && document.getText(wordRange) === word;
};
if ((ch === 'd' && !isEndAt('end')) || (ch === 'e' && !isEndAt('done'))) {
return [];
}
return doOcpIndent(document.getText(), token);
}
}, ';', '|', ')', ']', '}', 'd', 'e')
);
context.subscriptions.push(
vscode.languages.registerCompletionItemProvider(ocamlLang, {
async provideCompletionItems(document, position, token) {
return new vscode.CompletionList(ocamlKeywords.map((keyword) => {
let completionItem = new vscode.CompletionItem(keyword);
completionItem.kind = vscode.CompletionItemKind.Keyword;
return completionItem;
}));
}
})
);
context.subscriptions.push(
vscode.languages.registerCompletionItemProvider(ocamlLang, {
async provideCompletionItems(document, position, token) {
let line = document.getText(new vscode.Range(
new vscode.Position(position.line, 0),
position
));
let prefix = /[A-Za-z_][A-Za-z_'0-9]*(?:\.[A-Za-z_][A-Za-z_'0-9]*)*\.?$/.exec(line)[0];
await session.syncBuffer(document.fileName, document.getText(), token);
if (token.isCancellationRequested) return null;
let [status, result] = await session.request(['complete', 'prefix', prefix, 'at', fromVsPos(position)]);
if (token.isCancellationRequested) return null;
if (status !== 'return') return;
return new vscode.CompletionList(result.entries.map(({name, kind, desc, info}) => {
let completionItem = new vscode.CompletionItem(name);
let toVsKind = (kind) => {
switch (kind.toLowerCase()) {
case "value": return vscode.CompletionItemKind.Value;
case "variant": return vscode.CompletionItemKind.Enum;
case "constructor": return vscode.CompletionItemKind.Constructor;
case "label": return vscode.CompletionItemKind.Field;
case "module": return vscode.CompletionItemKind.Module;
case "signature": return vscode.CompletionItemKind.Interface;
case "type": return vscode.CompletionItemKind.Class;
case "method": return vscode.CompletionItemKind.Function;
case "#": return vscode.CompletionItemKind.Method;
case "exn": return vscode.CompletionItemKind.Constructor;
case "class": return vscode.CompletionItemKind.Class;
}
//.........这里部分代码省略.........
示例10: activate
export function activate(context: vs.ExtensionContext) {
let extensionStartTime = new Date();
sdks = util.findSdks();
if (sdks.dart == null) {
if (util.isFlutterProject) {
vs.window.showErrorMessage("Could not find a Flutter SDK to use. " +
"Please add it to your PATH or set FLUTTER_HOME and reload.",
"Go to Flutter Downloads"
).then(selectedItem => {
if (selectedItem)
util.openInBrowser(FLUTTER_DOWNLOAD_URL);
});
}
else {
vs.window.showErrorMessage("Could not find a Dart SDK to use. " +
"Please add it to your PATH or configure the 'dart.sdkPath' setting and reload.",
"Go to Dart Downloads"
).then(selectedItem => {
if (selectedItem)
util.openInBrowser(DART_DOWNLOAD_URL);
});
}
analytics.logSdkDetectionFailure();
return; // Don't set anything else up; we can't work like this!
}
// Show the SDK version in the status bar.
let sdkVersion = util.getDartSdkVersion(sdks.dart);
if (sdkVersion) {
let versionStatusItem = vs.window.createStatusBarItem(vs.StatusBarAlignment.Right, Number.MIN_VALUE);
versionStatusItem.text = sdkVersion;
versionStatusItem.tooltip = "Dart SDK Version";
versionStatusItem.show();
context.subscriptions.push(versionStatusItem);
if (config.checkForSdkUpdates && !util.isFlutterProject) {
util.getLatestSdkVersion().then(version => {
if (util.isOutOfDate(sdkVersion, version))
vs.window.showWarningMessage(
`Version ${version} of the Dart SDK is available (you have ${sdkVersion}). Some features of Dart Code may not work correctly with an old SDK.`,
"Go to Dart Downloads"
).then(selectedItem => {
if (selectedItem)
util.openInBrowser(DART_DOWNLOAD_URL);
});
}, util.logError);
}
analytics.sdkVersion = sdkVersion;
}
// Fire up the analyzer process.
let analyzerStartTime = new Date();
const analyzerPath = config.analyzerPath || path.join(sdks.dart, util.analyzerPath);
analyzer = new Analyzer(path.join(sdks.dart, util.dartVMPath), analyzerPath);
context.subscriptions.push(analyzer);
// Log analysis server startup time when we get the welcome message/version.
let connectedEvents = analyzer.registerForServerConnected(sc => {
analytics.analysisServerVersion = sc.version;
let analyzerEndTime = new Date();
analytics.logAnalyzerStartupTime(analyzerEndTime.getTime() - analyzerStartTime.getTime());
connectedEvents.dispose();
});
// Log analysis server first analysis completion time when it completes.
var analysisStartTime: Date;
let analysisCompleteEvents = analyzer.registerForServerStatus(ss => {
// Analysis started for the first time.
if (ss.analysis && ss.analysis.isAnalyzing && !analysisStartTime)
analysisStartTime = new Date();
// Analysis ends for the first time.
if (ss.analysis && !ss.analysis.isAnalyzing && analysisStartTime) {
let analysisEndTime = new Date();
analytics.logAnalyzerFirstAnalysisTime(analysisEndTime.getTime() - analysisStartTime.getTime());
analysisCompleteEvents.dispose();
}
});
// TODO: Check if EventEmitter<T> would be more appropriate than our own.
// Set up providers.
context.subscriptions.push(vs.languages.registerHoverProvider(DART_MODE, new DartHoverProvider(analyzer)));
context.subscriptions.push(vs.languages.registerDocumentFormattingEditProvider(DART_MODE, new DartFormattingEditProvider(analyzer)));
context.subscriptions.push(vs.languages.registerOnTypeFormattingEditProvider(DART_MODE, new DartTypeFormattingEditProvider(analyzer), "}", ";"));
context.subscriptions.push(vs.languages.registerCompletionItemProvider(DART_MODE, new DartCompletionItemProvider(analyzer), ".", ":", " ", "=", "("));
context.subscriptions.push(vs.languages.registerDefinitionProvider(DART_MODE, new DartDefinitionProvider(analyzer)));
context.subscriptions.push(vs.languages.registerDocumentSymbolProvider(DART_MODE, new DartDocumentSymbolProvider(analyzer)));
context.subscriptions.push(vs.languages.registerReferenceProvider(DART_MODE, new DartReferenceProvider(analyzer)));
context.subscriptions.push(vs.languages.registerWorkspaceSymbolProvider(new DartWorkspaceSymbolProvider(analyzer)));
context.subscriptions.push(vs.languages.registerDocumentHighlightProvider(DART_MODE, new DartDocumentHighlightProvider(analyzer)));
context.subscriptions.push(vs.languages.registerCodeActionsProvider(DART_MODE, new DartCodeActionProvider(analyzer)));
context.subscriptions.push(vs.languages.registerRenameProvider(DART_MODE, new DartRenameProvider(analyzer)));
context.subscriptions.push(vs.languages.setLanguageConfiguration(DART_MODE.language, new DartLanguageConfiguration()));
context.subscriptions.push(new AnalyzerStatusReporter(analyzer));
// Set up diagnostics.
let diagnostics = vs.languages.createDiagnosticCollection("dart");
context.subscriptions.push(diagnostics);
let diagnosticsProvider = new DartDiagnosticProvider(analyzer, diagnostics);
//.........这里部分代码省略.........