| Index: Source/devtools/front_end/source_frame/TextEditorAutocompleteController.js
|
| diff --git a/Source/devtools/front_end/source_frame/TextEditorAutocompleteController.js b/Source/devtools/front_end/source_frame/TextEditorAutocompleteController.js
|
| index fc755380a398e468462f08f26742386226b22807..3d7cae44e1c1255758d43cc5b0d61f5130c31542 100644
|
| --- a/Source/devtools/front_end/source_frame/TextEditorAutocompleteController.js
|
| +++ b/Source/devtools/front_end/source_frame/TextEditorAutocompleteController.js
|
| @@ -126,6 +126,53 @@ WebInspector.TextEditorAutocompleteController.prototype = {
|
| var prefixRange = substituteRange.clone();
|
| prefixRange.endColumn = cursor.ch;
|
|
|
| + var oldPrefixRange = this._prefixRange;
|
| + this._prefixRange = prefixRange;
|
| +
|
| + var prefix = this._textEditor.copyRange(prefixRange);
|
| +
|
| + if (!oldPrefixRange || prefixRange.startLine !== oldPrefixRange.startLine || prefixRange.startColumn !== oldPrefixRange.startColumn)
|
| + this._updateAnchorBox();
|
| +
|
| + var sourceUrl = this._textEditor.url();
|
| + if (sourceUrl) {
|
| + var mime = this._textEditor.mimeType();
|
| + var completionLocation = {
|
| + source: sourceUrl,
|
| + line: /** @type {number} */ (cursor.line),
|
| + column: /** @type {number} */ (cursor.ch)
|
| + };
|
| +
|
| + if (WebInspector.languageService.handles.completions(mime)) {
|
| + var anchor = this._anchorBox; //This can be removed by other calls to _updateAnchorBox, keep it for us
|
| +
|
| + /**
|
| + * @this {!WebInspector.TextEditorAutocompleteController}
|
| + */
|
| + function completionsReadyCallback(completions) {
|
| + var texts = completions.map(function(i){ return i.text; });
|
| + var details = completions.map(function(i){ return i.details; });
|
| + if (!this._suggestBox)
|
| + this._suggestBox = new WebInspector.SuggestBox(this, 6);
|
| +
|
| + this._suggestBox.updateSuggestions(anchor, texts, 0, true, prefix, details);
|
| + if (!this._suggestBox.visible())
|
| + this.finishAutocomplete();
|
| + this._onSuggestionsShownForTest(texts);
|
| + }
|
| +
|
| + var lastCompletion = this._lastCompletion = WebInspector.languageService.completions(mime, completionLocation, prefix).then((function(vals) {
|
| + if (lastCompletion !== this._lastCompletion) return;
|
| + if (!vals) {
|
| + completionsReadyCallback.call(this, []);
|
| + return;
|
| + }
|
| + completionsReadyCallback.call(this, vals);
|
| + }).bind(this));
|
| + return;
|
| + }
|
| + }
|
| +
|
| var wordsWithPrefix = this._delegate.wordsWithPrefix(this._textEditor, prefixRange, substituteRange);
|
| if (!wordsWithPrefix.length) {
|
| this.finishAutocomplete();
|
| @@ -134,11 +181,7 @@ WebInspector.TextEditorAutocompleteController.prototype = {
|
|
|
| if (!this._suggestBox)
|
| this._suggestBox = new WebInspector.SuggestBox(this, 6);
|
| - var oldPrefixRange = this._prefixRange;
|
| - this._prefixRange = prefixRange;
|
| - if (!oldPrefixRange || prefixRange.startLine !== oldPrefixRange.startLine || prefixRange.startColumn !== oldPrefixRange.startColumn)
|
| - this._updateAnchorBox();
|
| - this._suggestBox.updateSuggestions(this._anchorBox, wordsWithPrefix, 0, true, this._textEditor.copyRange(prefixRange));
|
| + this._suggestBox.updateSuggestions(this._anchorBox, wordsWithPrefix, 0, true, prefix);
|
| if (!this._suggestBox.visible())
|
| this.finishAutocomplete();
|
| this._onSuggestionsShownForTest(wordsWithPrefix);
|
| @@ -194,6 +237,9 @@ WebInspector.TextEditorAutocompleteController.prototype = {
|
| */
|
| acceptSuggestion: function()
|
| {
|
| + if (!this._prefixRange)
|
| + return;
|
| +
|
| if (this._prefixRange.endColumn - this._prefixRange.startColumn === this._currentSuggestion.length)
|
| return;
|
|
|
| @@ -224,7 +270,7 @@ WebInspector.TextEditorAutocompleteController.prototype = {
|
|
|
| _onCursorActivity: function()
|
| {
|
| - if (!this._suggestBox)
|
| + if (!(this._suggestBox && this._prefixRange))
|
| return;
|
| var cursor = this._codeMirror.getCursor();
|
| if (cursor.line !== this._prefixRange.startLine || cursor.ch > this._prefixRange.endColumn || cursor.ch <= this._prefixRange.startColumn)
|
| @@ -233,6 +279,7 @@ WebInspector.TextEditorAutocompleteController.prototype = {
|
|
|
| _updateAnchorBox: function()
|
| {
|
| + if (!this._prefixRange) return;
|
| var line = this._prefixRange.startLine;
|
| var column = this._prefixRange.startColumn;
|
| var metrics = this._textEditor.cursorPositionToCoordinates(line, column);
|
|
|