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..b9961f163374f4e65439a49a7c38c99323cf8724 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; |
pfeldman
2015/08/13 21:15:47
Language support needs to be added outside of this
wes
2015/08/14 00:55:05
So if not in source_frame then in sources? (I supp
pfeldman
2015/08/17 21:15:52
Let me talk to lushnikov@ about the way we should
wes
2015/08/25 18:13:18
Any progress on this?
|
+ 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.getMimeType(); |
+ 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); |