提交 a14a041c 编写于 作者: J Johannes Rieken

remove suggest config options

上级 cea0c43c
......@@ -31,22 +31,6 @@ configurationRegistry.registerConfiguration({
'type': 'object',
'title': nls.localize('jsConfigurationTitle', "JavaScript configuration"),
'allOf': [
{
'type': 'object',
'title': nls.localize('suggestSettings', "Controls how JavaScript IntelliSense works."),
'properties': {
'javascript.suggest.alwaysAllWords': {
'type': 'boolean',
'default': defaults.suggest.alwaysAllWords,
'description': nls.localize('allwaysAllWords', "Always include all words from the current document."),
},
'javascript.suggest.useCodeSnippetsOnMethodSuggest': {
'type': 'boolean',
'default': defaults.suggest.useCodeSnippetsOnMethodSuggest,
'description': nls.localize('useCodeSnippetsOnMethodSuggest', "Complete functions with their parameter signature."),
}
}
},
{
'title': nls.localize('compilationSettings', "Controls how JavaScript validation works."),
'type': 'object',
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import URI from 'vs/base/common/uri';
import collections = require('vs/base/common/collections');
import EditorCommon = require('vs/editor/common/editorCommon');
import Modes = require('vs/editor/common/modes');
import ts = require('vs/languages/typescript/common/lib/typescriptServices');
import converter = require('vs/languages/typescript/common/features/converter');
import previewer = require('vs/languages/typescript/common/features/previewer');
import Options = require('vs/languages/typescript/common/options');
function getWordAtOffset(text: string, offset: number): string {
var endOffset = offset;
while(offset > 0 && /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s])/.test(text.charAt(offset - 1))) {
offset -= 1;
}
return text.substring(offset, endOffset);
}
function suggestionHashFn(suggestion:Modes.ISuggestion):string {
return suggestion.type + suggestion.label + suggestion.codeSnippet;
}
export function computeSuggestions(languageService: ts.LanguageService, resource: URI,
position: EditorCommon.IPosition, options: Options): Modes.ISuggestResult {
var filename = resource.toString(),
sourceFile = languageService.getSourceFile(filename),
offset = converter.getOffset(sourceFile, position);
// ask language service to complete at this offset
var completions = languageService.getCompletionsAtPosition(filename, offset),
suggestions = collections.createStringDictionary<Modes.ISuggestion>();
if (completions) {
for (var i = 0, len = completions.entries.length; i < len; i++) {
var entry = completions.entries[i];
collections.insert(suggestions, {
label: entry.name,
codeSnippet: entry.name,
type: monacoTypeFromEntryKind(entry.kind)
}, suggestionHashFn);
}
}
let fullText = sourceFile.getFullText();
let currentWord = getWordAtOffset(fullText, offset);
if (options.suggest.alwaysAllWords) {
let words = fullText.split(/\W+/);
for(let word of words) {
word = word.trim();
if(word) {
collections.insert(suggestions, {
label: word,
codeSnippet: word,
type: 'text'
}, suggestionHashFn);
}
}
}
return {
currentWord: currentWord,
suggestions: collections.values(suggestions)
};
}
export function getSuggestionDetails(languageService: ts.LanguageService, resource:URI, position:EditorCommon.IPosition,
suggestion: Modes.ISuggestion, options: Options): Modes.ISuggestion {
if(suggestion.type === 'snippet') {
return suggestion;
}
var filename = resource.toString(),
sourceFile = languageService.getSourceFile(filename),
offset = converter.getOffset(sourceFile, position),
details = languageService.getCompletionEntryDetails(filename, offset, suggestion.label);
if(!details) {
return suggestion;
}
suggestion.documentationLabel = previewer.plain(details.documentation);
suggestion.typeLabel = previewer.plain(details.displayParts);
suggestion.codeSnippet = details.name;
if(options.suggest.useCodeSnippetsOnMethodSuggest && monacoTypeFromEntryKind(details.kind) === 'function') {
var codeSnippet = details.name,
suggestionArgumentNames: string[];
suggestionArgumentNames = details.displayParts
.filter(part => part.kind === 'parameterName')
.map(part => `{{${part.text}}}`);
if (suggestionArgumentNames.length > 0) {
codeSnippet += '(' + suggestionArgumentNames.join(', ') + '){{}}';
} else {
codeSnippet += '()';
}
suggestion.codeSnippet = codeSnippet;
}
return suggestion;
}
function monacoTypeFromEntryKind(kind:string):string {
switch(kind) {
case ts.ScriptElementKind.primitiveType:
case ts.ScriptElementKind.keyword:
return 'keyword';
case ts.ScriptElementKind.variableElement:
case ts.ScriptElementKind.localVariableElement:
case ts.ScriptElementKind.memberVariableElement:
case ts.ScriptElementKind.memberGetAccessorElement:
case ts.ScriptElementKind.memberSetAccessorElement:
return 'field';
case ts.ScriptElementKind.functionElement:
case ts.ScriptElementKind.memberFunctionElement:
case ts.ScriptElementKind.constructSignatureElement:
case ts.ScriptElementKind.callSignatureElement:
return 'function';
}
return kind;
}
......@@ -14,6 +14,6 @@ require.config({
}
});
define(['./raw.typescriptServices', 'vs/text!./lib.d.ts'], function (ts) {
define(['./raw.typescriptServices', 'vs/text!./lib.d.ts', 'vs/text!./lib.es6.d.ts'], function (ts) {
return ts;
});
......@@ -8,43 +8,28 @@ import objects = require('vs/base/common/objects');
interface Options {
suggest: {
alwaysAllWords: boolean;
useCodeSnippetsOnMethodSuggest: boolean;
};
validate: {
enable: boolean;
semanticValidation: boolean;
syntaxValidation: boolean;
_surpressSuperWithoutSuperTypeError: boolean;
};
}
namespace Options {
export var typeScriptOptions: Options = Object.freeze({
suggest: {
alwaysAllWords: false,
useCodeSnippetsOnMethodSuggest: false
},
validate: {
enable: true,
semanticValidation: true,
syntaxValidation: true,
_surpressSuperWithoutSuperTypeError: false
}
});
export var javaScriptOptions: Options = Object.freeze({
suggest: {
alwaysAllWords: false,
useCodeSnippetsOnMethodSuggest: false
},
validate: {
enable: true,
semanticValidation: true,
syntaxValidation: true,
_surpressSuperWithoutSuperTypeError: false
}
});
......
......@@ -4,13 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import 'vs/css!./typescript';
import nls = require('vs/nls');
import platform = require('vs/platform/platform');
import {ModesRegistry} from 'vs/editor/common/modes/modesRegistry';
import ConfigurationRegistry = require('vs/platform/configuration/common/configurationRegistry');
import options = require('vs/languages/typescript/common/options');
let defaults = options.typeScriptOptions;
// ----- Registration and Configuration --------------------------------------------------------
......@@ -22,29 +16,3 @@ ModesRegistry.registerCompatMode({
moduleId: 'vs/languages/typescript/common/typescriptMode',
ctorName: 'TypeScriptMode'
});
var configurationRegistry = <ConfigurationRegistry.IConfigurationRegistry>platform.Registry.as(ConfigurationRegistry.Extensions.Configuration);
configurationRegistry.registerConfiguration({
'id': 'typescript',
'order': 20,
'title': nls.localize('tsConfigurationTitle', "TypeScript configuration"),
'allOf': [
{
'type': 'object',
'title': nls.localize('suggestSettings', "Controls how TypeScript IntelliSense works."),
'properties': {
'typescript.suggest.alwaysAllWords': {
'type': 'boolean',
'default': defaults.suggest.alwaysAllWords,
'description': nls.localize('allwaysAllWords', "Always include all words from the current document."),
},
'typescript.suggest.useCodeSnippetsOnMethodSuggest': {
'type': 'boolean',
'default': defaults.suggest.useCodeSnippetsOnMethodSuggest,
'description': nls.localize('useCodeSnippetsOnMethodSuggest', "Complete functions with their parameter signature."),
}
}
}
]
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册