From 2b7dccce56f960eeacdcb4ba34ad30e24a94af89 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Thu, 3 Dec 2015 17:38:01 +0100 Subject: [PATCH] [php] missing user code auto-complete on 0.10.1 #161 --- .../src/features/completionItemProvider.ts | 12 ++++++++- .../php/src/test/php-worker.test.ts.disabled | 27 +++++++++++-------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/extensions/php/src/features/completionItemProvider.ts b/extensions/php/src/features/completionItemProvider.ts index 2f3405c45ff..6eb3b0953db 100644 --- a/extensions/php/src/features/completionItemProvider.ts +++ b/extensions/php/src/features/completionItemProvider.ts @@ -61,7 +61,17 @@ export default class PHPCompletionItemProvider implements CompletionItemProvider while (match = variableMatch.exec(text)) { var word = match[0]; if (!added[word]) { - result.push(createNewProposal(CompletionItemKind.Variable, name, null)); + added[word] = true; + result.push(createNewProposal(CompletionItemKind.Variable, word, null)); + } + } + var functionMatch = /function\s+([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*\(/g; + var match : RegExpExecArray = null; + while (match = functionMatch.exec(text)) { + var word = match[1]; + if (!added[word]) { + added[word] = true; + result.push(createNewProposal(CompletionItemKind.Function, word, null)); } } return Promise.resolve(result); diff --git a/extensions/php/src/test/php-worker.test.ts.disabled b/extensions/php/src/test/php-worker.test.ts.disabled index a8dd9e72ba3..336555289e9 100644 --- a/extensions/php/src/test/php-worker.test.ts.disabled +++ b/extensions/php/src/test/php-worker.test.ts.disabled @@ -1,5 +1,5 @@ import assert = require('assert'); -import {CompletionItemProvider, CompletionItem, CompletionItemKind, CancellationToken, TextDocument, Range, Position, Uri} from 'vscode'; +import {CompletionItemProvider, CompletionItem, CompletionItemKind, CancellationToken, TextDocument, Range, Position, Uri, workspace, window} from 'vscode'; import PHPCompletionItemProvider from '../features/completionItemProvider'; import HoverProvider from '../features/hoverProvider'; import SignatureHelpProvider from '../features/signatureHelpProvider'; @@ -7,14 +7,19 @@ import SignatureHelpProvider from '../features/signatureHelpProvider'; var phpCompletionProvider = new PHPCompletionItemProvider(); -var testSuggestionsFor = function(value:string, stringBefore:string):Promise { - var uri = new Uri(); - var doc = new TextDocument(uri, value.split('\n'), '\n', 'php', 1, false); - - var idx = stringBefore ? value.indexOf(stringBefore) + stringBefore.length : 0; - var position = new Position(0, idx); - - return phpCompletionProvider.provideCompletionItems(doc, position, null); +var testSuggestionsFor = function(value:string, stringBefore:string):Thenable { + return workspace.openTextDocument(Uri.parse("untitled:/foo/new.js")).then(document => { + return window.showTextDocument(document).then(textEditor => { + return textEditor.edit(editBuilder => { + var lastLineLength = document.lineAt(document.lineCount - 1).text.length; + editBuilder.replace(new vscode.Range(new vscode.Position(0, 0), new vscode.Position(textEditor.document.lineCount - 1, lastLineLength)), value); + }).then(() => { + var idx = stringBefore ? value.indexOf(stringBefore) + stringBefore.length : 0; + var position = new Position(0, idx); + return phpCompletionProvider.provideCompletionItems(document, position, null); + }) + }) + }); }; var assertSuggestion= function(completions:CompletionItem[], label:string, kind: CompletionItemKind) { @@ -25,9 +30,9 @@ var assertSuggestion= function(completions:CompletionItem[], label:string, kind: assert.equal(entries[0].kind, kind); }; -suite("Extension Tests", () => { +suite("PHP", () => { - test("Something 1", (testDone:(err?:any) => void) => { + test("Intellisense", (testDone:(err?:any) => void) => { Promise.all([ testSuggestionsFor(' { assertSuggestion(completions, '__CLASS__', CompletionItemKind.Field);