| Index: third_party/WebKit/Source/devtools/front_end/sass/ASTSourceMap.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/sass/ASTSourceMap.js b/third_party/WebKit/Source/devtools/front_end/sass/ASTSourceMap.js
|
| index e36de91892fc3870765433d5333a86a4f6c2dba2..17b21fe04188888971c5a7a8596bb9eada0ff5e5 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/sass/ASTSourceMap.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/sass/ASTSourceMap.js
|
| @@ -1,17 +1,18 @@
|
| // 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
|
| * @implements {WebInspector.SourceMap}
|
| - * @param {string} compiledURL
|
| - * @param {string} sourceMapURL
|
| - * @param {!Map<string, !WebInspector.SASSSupport.AST>} models
|
| - * @param {?function(!WebInspector.ASTSourceMap, !Array<!WebInspector.TextRange>, !Array<string>):!Promise<?WebInspector.SourceMap.EditResult>} editCallback
|
| + * @unrestricted
|
| */
|
| -WebInspector.ASTSourceMap = function(compiledURL, sourceMapURL, models, editCallback)
|
| -{
|
| +WebInspector.ASTSourceMap = class {
|
| + /**
|
| + * @param {string} compiledURL
|
| + * @param {string} sourceMapURL
|
| + * @param {!Map<string, !WebInspector.SASSSupport.AST>} models
|
| + * @param {?function(!WebInspector.ASTSourceMap, !Array<!WebInspector.TextRange>, !Array<string>):!Promise<?WebInspector.SourceMap.EditResult>} editCallback
|
| + */
|
| + constructor(compiledURL, sourceMapURL, models, editCallback) {
|
| this._editCallback = editCallback;
|
| this._compiledURL = compiledURL;
|
| this._sourceMapURL = sourceMapURL;
|
| @@ -21,199 +22,184 @@ WebInspector.ASTSourceMap = function(compiledURL, sourceMapURL, models, editCall
|
| this._compiledToSource = new Map();
|
| /** @type {!Multimap<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSSupport.TextNode>} */
|
| this._sourceToCompiled = new Multimap();
|
| -};
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {string}
|
| + */
|
| + compiledURL() {
|
| + return this._compiledURL;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {string}
|
| + */
|
| + url() {
|
| + return this._sourceMapURL;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {!Array<string>}
|
| + */
|
| + sourceURLs() {
|
| + return this._models.keysArray().filter(url => url !== this._compiledURL);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {string} sourceURL
|
| + * @param {!WebInspector.ResourceType} contentType
|
| + * @return {!WebInspector.ContentProvider}
|
| + */
|
| + sourceContentProvider(sourceURL, contentType) {
|
| + var model = this.modelForURL(sourceURL);
|
| + var sourceContent = model ? model.document.text.value() : '';
|
| + return WebInspector.StaticContentProvider.fromString(sourceURL, contentType, sourceContent);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {string} sourceURL
|
| + * @return {?string}
|
| + */
|
| + embeddedContentByURL(sourceURL) {
|
| + var model = this.modelForURL(sourceURL);
|
| + return model ? model.document.text.value() : '';
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {number} lineNumber
|
| + * @param {number=} columnNumber
|
| + * @return {?WebInspector.SourceMapEntry}
|
| + */
|
| + findEntry(lineNumber, columnNumber) {
|
| + columnNumber = columnNumber || 0;
|
| + var compiledNode = this.compiledModel().findNodeForPosition(lineNumber, columnNumber);
|
| + if (!compiledNode)
|
| + return null;
|
| + var sourceNode = this.toSourceNode(compiledNode);
|
| + if (!sourceNode)
|
| + return null;
|
| + return new WebInspector.SourceMapEntry(
|
| + lineNumber, columnNumber, sourceNode.document.url, sourceNode.range.startLine, sourceNode.range.startColumn);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {boolean}
|
| + */
|
| + editable() {
|
| + return !!this._editCallback;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!Array<!WebInspector.TextRange>} ranges
|
| + * @param {!Array<string>} texts
|
| + * @return {!Promise<?WebInspector.SourceMap.EditResult>}
|
| + */
|
| + editCompiled(ranges, texts) {
|
| + return this._editCallback.call(null, this, ranges, texts);
|
| + }
|
| +
|
| + /**
|
| + * @return {!WebInspector.SASSSupport.AST}
|
| + */
|
| + compiledModel() {
|
| + return /** @type {!WebInspector.SASSSupport.AST} */ (this._models.get(this._compiledURL));
|
| + }
|
| +
|
| + /**
|
| + * @return {!Map<string, !WebInspector.SASSSupport.AST>}
|
| + */
|
| + sourceModels() {
|
| + var sourceModels = /** @type {!Map<string, !WebInspector.SASSSupport.AST>} */ (new Map(this._models));
|
| + sourceModels.delete(this._compiledURL);
|
| + return sourceModels;
|
| + }
|
| +
|
| + /**
|
| + * @return {!Map<string, !WebInspector.SASSSupport.AST>}
|
| + */
|
| + models() {
|
| + return /** @type {!Map<string, !WebInspector.SASSSupport.AST>} */ (new Map(this._models));
|
| + }
|
| +
|
| + /**
|
| + * @param {string} url
|
| + * @return {?WebInspector.SASSSupport.AST}
|
| + */
|
| + modelForURL(url) {
|
| + return this._models.get(url) || null;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.SASSSupport.TextNode} compiled
|
| + * @param {!WebInspector.SASSSupport.TextNode} source
|
| + */
|
| + addMapping(compiled, source) {
|
| + this._compiledToSource.set(compiled, source);
|
| + this._sourceToCompiled.set(source, compiled);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.SASSSupport.TextNode} compiled
|
| + * @param {!WebInspector.SASSSupport.TextNode} source
|
| + */
|
| + removeMapping(compiled, source) {
|
| + this._compiledToSource.delete(compiled);
|
| + this._sourceToCompiled.remove(source, compiled);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.SASSSupport.TextNode} compiled
|
| + * @return {?WebInspector.SASSSupport.TextNode}
|
| + */
|
| + toSourceNode(compiled) {
|
| + return this._compiledToSource.get(compiled) || null;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.SASSSupport.TextNode} source
|
| + * @return {!Array<!WebInspector.SASSSupport.TextNode>}
|
| + */
|
| + toCompiledNodes(source) {
|
| + var compiledNodes = this._sourceToCompiled.get(source);
|
| + return compiledNodes ? compiledNodes.valuesArray() : [];
|
| + }
|
| +
|
| + /**
|
| + * @param {!Array<!WebInspector.SASSSupport.AST>} updated
|
| + * @param {!Map<!WebInspector.SASSSupport.Node, !WebInspector.SASSSupport.Node>=} outNodeMapping
|
| + * @return {?WebInspector.ASTSourceMap}
|
| + */
|
| + rebase(updated, outNodeMapping) {
|
| + outNodeMapping = outNodeMapping || new Map();
|
| + outNodeMapping.clear();
|
| +
|
| + var models = /** @type {!Map<string, !WebInspector.SASSSupport.AST>} */ (new Map(this._models));
|
| + for (var newAST of updated) {
|
| + var oldAST = models.get(newAST.document.url);
|
| + if (!oldAST.match(newAST, outNodeMapping))
|
| + return null;
|
| + models.set(newAST.document.url, newAST);
|
| + }
|
|
|
| -WebInspector.ASTSourceMap.prototype = {
|
| - /**
|
| - * @override
|
| - * @return {string}
|
| - */
|
| - compiledURL: function()
|
| - {
|
| - return this._compiledURL;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {string}
|
| - */
|
| - url: function()
|
| - {
|
| - return this._sourceMapURL;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {!Array<string>}
|
| - */
|
| - sourceURLs: function()
|
| - {
|
| - return this._models.keysArray().filter(url => url !== this._compiledURL);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {string} sourceURL
|
| - * @param {!WebInspector.ResourceType} contentType
|
| - * @return {!WebInspector.ContentProvider}
|
| - */
|
| - sourceContentProvider: function(sourceURL, contentType)
|
| - {
|
| - var model = this.modelForURL(sourceURL);
|
| - var sourceContent = model ? model.document.text.value() : "";
|
| - return WebInspector.StaticContentProvider.fromString(sourceURL, contentType, sourceContent);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {string} sourceURL
|
| - * @return {?string}
|
| - */
|
| - embeddedContentByURL: function(sourceURL)
|
| - {
|
| - var model = this.modelForURL(sourceURL);
|
| - return model ? model.document.text.value() : "";
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {number} lineNumber
|
| - * @param {number=} columnNumber
|
| - * @return {?WebInspector.SourceMapEntry}
|
| - */
|
| - findEntry: function(lineNumber, columnNumber)
|
| - {
|
| - columnNumber = columnNumber || 0;
|
| - var compiledNode = this.compiledModel().findNodeForPosition(lineNumber, columnNumber);
|
| - if (!compiledNode)
|
| - return null;
|
| - var sourceNode = this.toSourceNode(compiledNode);
|
| - if (!sourceNode)
|
| - return null;
|
| - return new WebInspector.SourceMapEntry(lineNumber, columnNumber, sourceNode.document.url, sourceNode.range.startLine, sourceNode.range.startColumn);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {boolean}
|
| - */
|
| - editable: function()
|
| - {
|
| - return !!this._editCallback;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!Array<!WebInspector.TextRange>} ranges
|
| - * @param {!Array<string>} texts
|
| - * @return {!Promise<?WebInspector.SourceMap.EditResult>}
|
| - */
|
| - editCompiled: function(ranges, texts)
|
| - {
|
| - return this._editCallback.call(null, this, ranges, texts);
|
| - },
|
| -
|
| - /**
|
| - * @return {!WebInspector.SASSSupport.AST}
|
| - */
|
| - compiledModel: function()
|
| - {
|
| - return /** @type {!WebInspector.SASSSupport.AST} */(this._models.get(this._compiledURL));
|
| - },
|
| -
|
| - /**
|
| - * @return {!Map<string, !WebInspector.SASSSupport.AST>}
|
| - */
|
| - sourceModels: function()
|
| - {
|
| - var sourceModels = /** @type {!Map<string, !WebInspector.SASSSupport.AST>} */(new Map(this._models));
|
| - sourceModels.delete(this._compiledURL);
|
| - return sourceModels;
|
| - },
|
| -
|
| - /**
|
| - * @return {!Map<string, !WebInspector.SASSSupport.AST>}
|
| - */
|
| - models: function()
|
| - {
|
| - return /** @type {!Map<string, !WebInspector.SASSSupport.AST>} */(new Map(this._models));
|
| - },
|
| -
|
| - /**
|
| - * @param {string} url
|
| - * @return {?WebInspector.SASSSupport.AST}
|
| - */
|
| - modelForURL: function(url)
|
| - {
|
| - return this._models.get(url) || null;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.SASSSupport.TextNode} compiled
|
| - * @param {!WebInspector.SASSSupport.TextNode} source
|
| - */
|
| - addMapping: function(compiled, source)
|
| - {
|
| - this._compiledToSource.set(compiled, source);
|
| - this._sourceToCompiled.set(source, compiled);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.SASSSupport.TextNode} compiled
|
| - * @param {!WebInspector.SASSSupport.TextNode} source
|
| - */
|
| - removeMapping: function(compiled, source)
|
| - {
|
| - this._compiledToSource.delete(compiled);
|
| - this._sourceToCompiled.remove(source, compiled);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.SASSSupport.TextNode} compiled
|
| - * @return {?WebInspector.SASSSupport.TextNode}
|
| - */
|
| - toSourceNode: function(compiled)
|
| - {
|
| - return this._compiledToSource.get(compiled) || null;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.SASSSupport.TextNode} source
|
| - * @return {!Array<!WebInspector.SASSSupport.TextNode>}
|
| - */
|
| - toCompiledNodes: function(source)
|
| - {
|
| - var compiledNodes = this._sourceToCompiled.get(source);
|
| - return compiledNodes ? compiledNodes.valuesArray() : [];
|
| - },
|
| -
|
| - /**
|
| - * @param {!Array<!WebInspector.SASSSupport.AST>} updated
|
| - * @param {!Map<!WebInspector.SASSSupport.Node, !WebInspector.SASSSupport.Node>=} outNodeMapping
|
| - * @return {?WebInspector.ASTSourceMap}
|
| - */
|
| - rebase: function(updated, outNodeMapping)
|
| - {
|
| - outNodeMapping = outNodeMapping || new Map();
|
| - outNodeMapping.clear();
|
| -
|
| - var models = /** @type {!Map<string, !WebInspector.SASSSupport.AST>} */(new Map(this._models));
|
| - for (var newAST of updated) {
|
| - var oldAST = models.get(newAST.document.url);
|
| - if (!oldAST.match(newAST, outNodeMapping))
|
| - return null;
|
| - models.set(newAST.document.url, newAST);
|
| - }
|
| -
|
| - var newMap = new WebInspector.ASTSourceMap(this._compiledURL, this._sourceMapURL, models, this._editCallback);
|
| - var compiledNodes = this._compiledToSource.keysArray();
|
| - for (var i = 0; i < compiledNodes.length; ++i) {
|
| - var compiledNode = compiledNodes[i];
|
| - var sourceNode = /** @type {!WebInspector.SASSSupport.TextNode} */(this._compiledToSource.get(compiledNode));
|
| - var mappedCompiledNode = /** @type {!WebInspector.SASSSupport.TextNode} */(outNodeMapping.get(compiledNode) || compiledNode);
|
| - var mappedSourceNode = /** @type {!WebInspector.SASSSupport.TextNode} */(outNodeMapping.get(sourceNode) || sourceNode);
|
| - newMap.addMapping(mappedCompiledNode, mappedSourceNode);
|
| - }
|
| - return newMap;
|
| + var newMap = new WebInspector.ASTSourceMap(this._compiledURL, this._sourceMapURL, models, this._editCallback);
|
| + var compiledNodes = this._compiledToSource.keysArray();
|
| + for (var i = 0; i < compiledNodes.length; ++i) {
|
| + var compiledNode = compiledNodes[i];
|
| + var sourceNode = /** @type {!WebInspector.SASSSupport.TextNode} */ (this._compiledToSource.get(compiledNode));
|
| + var mappedCompiledNode =
|
| + /** @type {!WebInspector.SASSSupport.TextNode} */ (outNodeMapping.get(compiledNode) || compiledNode);
|
| + var mappedSourceNode =
|
| + /** @type {!WebInspector.SASSSupport.TextNode} */ (outNodeMapping.get(sourceNode) || sourceNode);
|
| + newMap.addMapping(mappedCompiledNode, mappedSourceNode);
|
| }
|
| + return newMap;
|
| + }
|
| };
|
|
|