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

Unified Diff: third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js

Issue 1641893002: DevTools: [SASS] introduce workspace/cssModel adapter for SASS processor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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: third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js
diff --git a/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js b/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js
index 9cf0c453fd1e3c2316a658e0ece7fb78565d50fc..ebc1eb11ac2b4abe4dfcaf92157a845dd24b208e 100644
--- a/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js
+++ b/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js
@@ -5,10 +5,42 @@
WebInspector.SASSLiveSourceMap = {}
/**
+ * @param {!WebInspector.SASSWorkspaceAdapter.Client} client
+ * @param {!WebInspector.CSSParser} cssParser
+ * @param {!WebInspector.TokenizerFactory} tokenizer
+ * @param {!WebInspector.SourceMap} sourceMap
+ * @return {!Promise<?WebInspector.SASSLiveSourceMap.CSSToSASSMapping>}
+ */
+WebInspector.SASSLiveSourceMap._loadMapping = function(client, cssParser, tokenizer, sourceMap)
+{
+ var sassModels = new Map();
+ var cssAST = null;
+ var promises = [];
+ for (var url of sourceMap.sources()) {
dgozman 2016/01/27 23:14:04 client.sassURLs()
lushnikov 2016/01/28 00:04:29 Done.
+ var sassPromise = client.content(url)
+ .then(text => WebInspector.SASSSupport.parseSCSS(url, text, tokenizer))
+ .then(ast => sassModels.set(url, ast));
+ promises.push(sassPromise);
+ }
+ var cssPromise = client.content(sourceMap.compiledURL())
dgozman 2016/01/27 23:14:04 client.cssURL()
lushnikov 2016/01/28 00:04:29 Done.
+ .then(text => WebInspector.SASSSupport.parseCSS(cssParser, sourceMap.compiledURL(), text))
+ .then(ast => cssAST = ast);
+ promises.push(cssPromise);
+
+ return Promise.all(promises)
+ .then(() => WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap(sourceMap, cssAST, sassModels))
dgozman 2016/01/27 23:14:04 Use client.sourceMap() and remove sourceMap parame
lushnikov 2016/01/28 00:04:29 Done.
+ .catchException(/** @type {?WebInspector.SASSLiveSourceMap.CSSToSASSMapping} */(null))
dgozman 2016/01/27 23:14:04 semicolon missing
lushnikov 2016/01/28 00:04:29 Done.
+}
+
+/**
* @constructor
+ * @param {!WebInspector.SASSSupport.AST} cssAST
+ * @param {!Map<string, !WebInspector.SASSSupport.AST>} sassModels
*/
-WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function()
+WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function(cssAST, sassModels)
{
+ this._cssAST = cssAST;
+ this._sassModels = sassModels;
/** @type {!Map<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSSupport.TextNode>} */
this._cssToSass = new Map();
/** @type {!Multimap<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSSupport.TextNode>} */
@@ -23,7 +55,7 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function()
*/
WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap = function(sourceMap, cssAST, sassModels)
{
- var mapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping();
+ var mapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(cssAST, sassModels);
//FIXME: this works O(N^2).
cssAST.visit(map);
return mapping;
@@ -49,6 +81,22 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap = function(sourceM
WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = {
/**
+ * @return {!WebInspector.SASSSupport.AST}
+ */
+ cssAST: function()
+ {
+ return this._cssAST;
+ },
+
+ /**
+ * @return {!Map<string, !WebInspector.SASSSupport.AST>}
+ */
+ sassModels: function()
+ {
+ return this._sassModels;
+ },
+
+ /**
* @param {!WebInspector.SASSSupport.TextNode} css
* @param {!WebInspector.SASSSupport.TextNode} sass
*/
@@ -112,7 +160,7 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = {
*/
rebaseForCSSDiff: function(cssDiff)
{
- var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping();
+ var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(cssDiff.newAST, this._sassModels);
var cssNodes = this._cssToSass.keysArray();
for (var i = 0; i < cssNodes.length; ++i) {
var cssNode = cssNodes[i];
@@ -130,7 +178,9 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = {
*/
rebaseForSASSDiff: function(sassDiff)
{
- var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping();
+ var sassModels = new Map(this._sassModels);
+ sassModels.set(sassDiff.url, sassDiff.newAST);
+ var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(this._cssAST, sassModels);
var cssNodes = this._cssToSass.keysArray();
for (var i = 0; i < cssNodes.length; ++i) {
var cssNode = cssNodes[i];
@@ -159,5 +209,5 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = {
return false;
}
return true;
- }
+ },
dgozman 2016/01/27 23:14:04 revert
lushnikov 2016/01/28 00:04:29 Done.
}

Powered by Google App Engine
This is Rietveld 408576698