提交 2767b596 编写于 作者: M Martin Aeschlimann

[js] TypeError: e.split is not a function #829

上级 6c326105
......@@ -168,7 +168,8 @@ var sinonDD = 'sinon/sinon.d.ts';
var jasmineDD = 'jasmine/jasmine.d.ts';
var handlebarsDD = 'handlebars/handlebars.d.ts';
var typingsMap: { [key: string]: string | string[] } = {
// exported for tests
export var typingsMap: { [key: string]: string | string[] } = {
'angular': angularDD,
'$': jqueryDD, 'jquery': jqueryDD, 'jQuery': jqueryDD,
'process': nodejsDD, '__dirname': nodejsDD,
......@@ -195,13 +196,13 @@ function computeAddTypeDefinitionProposals(languageService: ts.LanguageService,
offset = converter.getOffset(sourceFile, { lineNumber: range.endLineNumber, column: range.endColumn }),
token = ts.findTokenOnLeftOfPosition(sourceFile, offset);
if (!token || token.getWidth() === 0) {
if (!token || token.getWidth() === 0 || (network.schemas.inMemory === resource.scheme)) {
return;
}
var currentWord = ts.getTextOfNode(token);
var mapping = typingsMap[currentWord];
if (mapping && (network.schemas.inMemory !== resource.scheme)) {
if (typingsMap.hasOwnProperty(currentWord)) {
var mapping = typingsMap[currentWord];
var dtsRefs: string[] = Array.isArray(mapping) ? <string[]> mapping : [ <string> mapping ];
dtsRefs.forEach((dtsRef) => {
result.push({
......@@ -212,7 +213,7 @@ function computeAddTypeDefinitionProposals(languageService: ts.LanguageService,
});
}
if (strings.endsWith(resource.fsPath, '.js')) {
if (strings.endsWith(resource.path, '.js')) {
result.push({
label: nls.localize('typescript.quickfix.addAsGlobal', "Mark '{0}' as global", currentWord),
id: JSON.stringify({ type: 'addglobal', name: currentWord }),
......
......@@ -16,30 +16,73 @@ import Options = require('vs/languages/typescript/common/options');
suite('TS - quick fix', () => {
function assertQuickFix(code: string, callback: (outline: Modes.IQuickFix[]) => any): void {
var fileName = 'a.ts';
var host = new utils.LanguageServiceHost().add(fileName, code);
function assertQuickFix(code: string, fileName: string, callback: (outline: Modes.IQuickFix[]) => any): void {
var filePath = 'file://test/' + fileName;
var fileURL = network.URL.parse(filePath);
var host = new utils.LanguageServiceHost().add(filePath, code);
var service = ts.createLanguageService(host, ts.createDocumentRegistry());
var markers = diagnostics.getSemanticDiagnostics(service, network.URL.fromValue(fileName), Options.typeScriptOptions).markers;
var markers = diagnostics.getSemanticDiagnostics(service, fileURL, Options.typeScriptOptions).markers;
assert.equal(markers.length, 1);
var marker = markers[0];
var elements = quickfix.compute(service, network.URL.fromValue(fileName), marker);
var elements = quickfix.compute(service, fileURL, marker);
try {
callback(elements);
} catch(e) {
assert.ok(false, e);
}
callback(elements);
}
test('quickfix', function() {
assertQuickFix('class C { private hello = 0; private world = this.hell0; }', (elements) => {
assertQuickFix('class C { private hello = 0; private world = this.hell0; }', 'a.ts', (elements) => {
assert.equal(elements.length, 1);
assert.equal(elements[0].label, "Rename to 'hello'");
});
assertQuickFix('_.foo();', 'a.ts', (elements) => {
assert.equal(elements.length, 2);
assert.equal(elements[0].label, "Download type definition underscore.d.ts");
assert.equal(elements[1].label, "Download type definition lodash.d.ts");
});
assertQuickFix('describe("x");', 'a.js', (elements) => {
assert.equal(elements.length, 3);
assert.equal(elements[0].label, "Download type definition mocha.d.ts");
assert.equal(elements[1].label, "Download type definition jasmine.d.ts");
assert.equal(elements[2].label, "Mark 'describe' as global");
});
assertQuickFix('angular.foo = 1;', 'a.ts', (elements) => {
assert.equal(elements.length, 1);
assert.equal(elements[0].label, "Download type definition angular.d.ts");
});
assertQuickFix('var x = __dirname;', 'a.ts', (elements) => {
assert.equal(elements.length, 1);
assert.equal(elements[0].label, "Download type definition node.d.ts");
});
assertQuickFix('ko.observable(null);', 'a.ts', (elements) => {
assert.equal(elements.length, 1);
assert.equal(elements[0].label, "Download type definition knockout.d.ts");
});
for (var id in quickfix.typingsMap) {
assertQuickFix(id + '.foo();', 'a.ts', (elements) => {
var value = quickfix.typingsMap[id];
var length = Array.isArray(value) ? value.length : 1;
assert.equal(elements.length, length);
});
}
assertQuickFix('foo.observable(null);', 'a.js', (elements) => {
assert.equal(elements.length, 1);
assert.equal(elements[0].label, "Mark 'foo' as global");
});
assertQuickFix('toString();', 'a.js', (elements) => {
assert.equal(elements.length, 1);
assert.equal(elements[0].label, "Mark 'toString' as global");
});
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册