Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Unified Diff: Source/devtools/front_end/languages/MultiLingualExecutionContext.js

Issue 1264133002: Devtools: [WIP] Implement enhanced devtools extension language APIs Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Small cleanups - prefer URIs to contentURLs, revert protocol unifications, remove lambdas Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/devtools/front_end/languages/MultiLingualExecutionContext.js
diff --git a/Source/devtools/front_end/languages/MultiLingualExecutionContext.js b/Source/devtools/front_end/languages/MultiLingualExecutionContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..3def58e726d24f27a3c4e5947c9d2b694091e79a
--- /dev/null
+++ b/Source/devtools/front_end/languages/MultiLingualExecutionContext.js
@@ -0,0 +1,98 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @constructor
+ * @extends {WebInspector.ExecutionContext}
+ * @param {!WebInspector.ExecutionContext} executionContext
+ */
+WebInspector.MultiLingualExecutionContext = function(executionContext)
+{
+ WebInspector.ExecutionContext.call(this, executionContext.runtimeModel.target(), executionContext.id, executionContext.name, executionContext.origin, executionContext.isMainWorldContext, executionContext.frameId);
+}
+
+WebInspector.MultiLingualExecutionContext.prototype = {
+ /**
+ * @param {!WebInspector.DebuggerModel.Location=} raw
+ */
+ _locationResolver: function(raw) {
+ if (!raw) return;
+ var loc = WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(raw);
+ return {
+ source: loc.uiSourceCode.uri(),
+ line: loc.lineNumber,
+ column: loc.columnNumber
+ };
+ },
+
+ /**
+ * @override
+ * @param {string} expression
+ * @param {string} objectGroup
+ * @param {boolean} includeCommandLineAPI
+ * @param {boolean} doNotPauseOnExceptionsAndMuteConsole
+ * @param {boolean} returnByValue
+ * @param {boolean} generatePreview
+ * @param {function(?WebInspector.RemoteObject, boolean, ?RuntimeAgent.RemoteObject=, ?DebuggerAgent.ExceptionDetails=)} callback
+ */
+ evaluate: function(expression, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, callback)
+ {
+ var mime = WebInspector.ResourceType.fromActivePanel();
+ if (WebInspector.languageService.handles.transpile(mime)) {
+ var location = this._locationResolver(this.pauseLocation());
+ WebInspector.languageService.transpile(mime, expression, location).then(function(result) {
+ WebInspector.ExecutionContext.prototype.evaluate.call(this, result, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, callback);
+ })
+ .catch(function(err) {
+ //TODO: decide how to handle errors?
+ throw err;
+ });
+ } else {
+ WebInspector.ExecutionContext.prototype.evaluate.call(this, expression, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, callback);
+ }
+ },
+
+ /**
+ * @override
+ * @param {string} expressionString
+ * @param {string} text
+ * @param {number} cursorOffset
+ * @param {string} prefix
+ * @param {boolean} force
+ * @param {function(!Array.<string>, number=)} completionsReadyCallback
+ */
+ completionsForExpression: function(expressionString, text, cursorOffset, prefix, force, completionsReadyCallback)
+ {
+ function handleDebuggerCompletionsComplete(vals) {
+ if (!vals) {
+ completionsReadyCallback([]);
+ }
+ completionsReadyCallback(vals.map(function(v) { return v.text; }));
+ }
+
+ var location = this._locationResolver(this.pauseLocation());
+
+ //If possible, ceede to the language service
+ if (location) { //paused - get active mime from pause location
+ var mime = WebInspector.ResourceType.mimeFromURL(location.source);
+
+ if (WebInspector.languageService.handles.debuggerCompletions(mime)) {
+ WebInspector.languageService.debuggerCompletions(mime, text, cursorOffset, prefix, location).then(handleDebuggerCompletionsComplete);
+ return;
+ }
+ } else { //not paused - get active mime from source pane
+ var activeDocMime = WebInspector.ResourceType.fromActivePanel();
+
+ if (WebInspector.languageService.handles.debuggerCompletions(activeDocMime)) {
+ WebInspector.languageService.debuggerCompletions(activeDocMime, text, cursorOffset, prefix, undefined).then(handleDebuggerCompletionsComplete);
+ return;
+ }
+ }
+
+ //Fallback to the underlying context
+ WebInspector.ExecutionContext.prototype.completionsForExpression.call(this, expressionString, text, cursorOffset, prefix, force, completionsReadyCallback);
+ },
+
+ __proto__: WebInspector.ExecutionContext.prototype
+}
« no previous file with comments | « Source/devtools/front_end/languages/LanguageService.js ('k') | Source/devtools/front_end/languages/module.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698