Index: third_party/WebKit/Source/devtools/front_end/components/ExecutionContextSelector.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/components/ExecutionContextSelector.js b/third_party/WebKit/Source/devtools/front_end/components/ExecutionContextSelector.js |
index 4e3676b025c963e8e50849af1648690e437e396e..0cf6dd826ca477969127d734c424c12c40946823 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/components/ExecutionContextSelector.js |
+++ b/third_party/WebKit/Source/devtools/front_end/components/ExecutionContextSelector.js |
@@ -202,13 +202,24 @@ WebInspector.ExecutionContextSelector.completionsForTextPromptInCurrentContext = |
} |
// Pass less stop characters to rangeOfWord so the range will be a more complete expression. |
- var expressionRange = wordRange.startContainer.rangeOfWord(wordRange.startOffset, " =:({;,!+-*/&|^<>", proxyElement, "backward"); |
+ var expressionRange = wordRange.startContainer.rangeOfWord(wordRange.startOffset, " =:({;,!+-*/&|^<>`", proxyElement, "backward"); |
var expressionString = expressionRange.toString(); |
- // The "[" is also a stop character, except when it's the last character of the expression. |
- var pos = expressionString.lastIndexOf("[", expressionString.length - 2); |
- if (pos !== -1) |
- expressionString = expressionString.substr(pos + 1); |
+ var bracketCount = 0; |
+ var index = expressionString.length - 1; |
+ while (index >= 0) { |
+ var character = expressionString.charAt(index); |
+ if (character === "]") |
+ bracketCount++; |
+ // Allow an open bracket at the end for property completion. |
+ if (character === "[" && index < expressionString.length - 1) { |
+ bracketCount--; |
+ if (bracketCount < 0) |
+ break; |
+ } |
+ index--; |
+ } |
+ expressionString = expressionString.substring(index + 1); |
var prefix = wordRange.toString(); |
executionContext.completionsForExpression(expressionString, prefix, force, completionsReadyCallback); |