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

Side by Side 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: remove settimeout from test 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 WebInspector.SASSLiveSourceMap = {} 5 WebInspector.SASSLiveSourceMap = {}
6 6
7 /** 7 /**
8 * @param {!WebInspector.SourceMapTracker} tracker
9 * @param {!WebInspector.CSSParser} cssParser
10 * @param {!WebInspector.TokenizerFactory} tokenizer
11 * @return {!Promise<?WebInspector.SASSLiveSourceMap.CSSToSASSMapping>}
12 */
13 WebInspector.SASSLiveSourceMap._loadMapping = function(tracker, cssParser, token izer)
14 {
15 var sassModels = new Map();
16 var cssAST = null;
17 var promises = [];
18 for (var url of tracker.sassURLs()) {
19 var sassPromise = tracker.content(url)
20 .then(text => WebInspector.SASSSupport.parseSCSS(url, text, tokenize r))
21 .then(ast => sassModels.set(url, ast));
22 promises.push(sassPromise);
23 }
24 var cssPromise = tracker.content(tracker.cssURL())
25 .then(text => WebInspector.SASSSupport.parseCSS(cssParser, tracker.cssUR L(), text))
26 .then(ast => cssAST = ast);
27 promises.push(cssPromise);
28
29 return Promise.all(promises)
30 .then(() => WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMa p(tracker.sourceMap(), cssAST, sassModels))
31 .catchException(/** @type {?WebInspector.SASSLiveSourceMap.CSSToSASSMapp ing} */(null));
32 }
33
34 /**
8 * @constructor 35 * @constructor
36 * @param {!WebInspector.SASSSupport.AST} cssAST
37 * @param {!Map<string, !WebInspector.SASSSupport.AST>} sassModels
9 */ 38 */
10 WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function() 39 WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function(cssAST, sassModels)
11 { 40 {
41 this._cssAST = cssAST;
42 this._sassModels = sassModels;
12 /** @type {!Map<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSSuppor t.TextNode>} */ 43 /** @type {!Map<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSSuppor t.TextNode>} */
13 this._cssToSass = new Map(); 44 this._cssToSass = new Map();
14 /** @type {!Multimap<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSS upport.TextNode>} */ 45 /** @type {!Multimap<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSS upport.TextNode>} */
15 this._sassToCss = new Multimap(); 46 this._sassToCss = new Multimap();
16 } 47 }
17 48
18 /** 49 /**
19 * @param {!WebInspector.SourceMap} sourceMap 50 * @param {!WebInspector.SourceMap} sourceMap
20 * @param {!WebInspector.SASSSupport.AST} cssAST 51 * @param {!WebInspector.SASSSupport.AST} cssAST
21 * @param {!Map<string, !WebInspector.SASSSupport.AST>} sassModels 52 * @param {!Map<string, !WebInspector.SASSSupport.AST>} sassModels
22 * @return {!WebInspector.SASSLiveSourceMap.CSSToSASSMapping} 53 * @return {!WebInspector.SASSLiveSourceMap.CSSToSASSMapping}
23 */ 54 */
24 WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap = function(sourceM ap, cssAST, sassModels) 55 WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap = function(sourceM ap, cssAST, sassModels)
25 { 56 {
26 var mapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(); 57 var mapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(cssAST, sa ssModels);
27 //FIXME: this works O(N^2). 58 //FIXME: this works O(N^2).
28 cssAST.visit(map); 59 cssAST.visit(map);
29 return mapping; 60 return mapping;
30 61
31 /** 62 /**
32 * @param {!WebInspector.SASSSupport.Node} cssNode 63 * @param {!WebInspector.SASSSupport.Node} cssNode
33 */ 64 */
34 function map(cssNode) 65 function map(cssNode)
35 { 66 {
36 if (!(cssNode instanceof WebInspector.SASSSupport.TextNode)) 67 if (!(cssNode instanceof WebInspector.SASSSupport.TextNode))
37 return; 68 return;
38 var entry = sourceMap.findEntry(cssNode.range.endLine, cssNode.range.end Column); 69 var entry = sourceMap.findEntry(cssNode.range.endLine, cssNode.range.end Column);
39 if (!entry || !entry.sourceURL || typeof entry.sourceLineNumber === "und efined" || typeof entry.sourceColumnNumber === "undefined") 70 if (!entry || !entry.sourceURL || typeof entry.sourceLineNumber === "und efined" || typeof entry.sourceColumnNumber === "undefined")
40 return; 71 return;
41 var sassAST = sassModels.get(entry.sourceURL); 72 var sassAST = sassModels.get(entry.sourceURL);
42 if (!sassAST) 73 if (!sassAST)
43 return; 74 return;
44 var sassNode = sassAST.findNodeForPosition(entry.sourceLineNumber, entry .sourceColumnNumber); 75 var sassNode = sassAST.findNodeForPosition(entry.sourceLineNumber, entry .sourceColumnNumber);
45 if (sassNode) 76 if (sassNode)
46 mapping.mapCssToSass(cssNode, sassNode); 77 mapping.mapCssToSass(cssNode, sassNode);
47 } 78 }
48 } 79 }
49 80
50 WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = { 81 WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = {
51 /** 82 /**
83 * @return {!WebInspector.SASSSupport.AST}
84 */
85 cssAST: function()
86 {
87 return this._cssAST;
88 },
89
90 /**
91 * @return {!Map<string, !WebInspector.SASSSupport.AST>}
92 */
93 sassModels: function()
94 {
95 return this._sassModels;
96 },
97
98 /**
52 * @param {!WebInspector.SASSSupport.TextNode} css 99 * @param {!WebInspector.SASSSupport.TextNode} css
53 * @param {!WebInspector.SASSSupport.TextNode} sass 100 * @param {!WebInspector.SASSSupport.TextNode} sass
54 */ 101 */
55 mapCssToSass: function(css, sass) 102 mapCssToSass: function(css, sass)
56 { 103 {
57 this._cssToSass.set(css, sass); 104 this._cssToSass.set(css, sass);
58 this._sassToCss.set(sass, css); 105 this._sassToCss.set(sass, css);
59 }, 106 },
60 107
61 /** 108 /**
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 { 152 {
106 return this.toCSSNodes(sassProperty.name).map(name => name.parent); 153 return this.toCSSNodes(sassProperty.name).map(name => name.parent);
107 }, 154 },
108 155
109 /** 156 /**
110 * @param {!WebInspector.SASSSupport.ASTDiff} cssDiff 157 * @param {!WebInspector.SASSSupport.ASTDiff} cssDiff
111 * @return {!WebInspector.SASSLiveSourceMap.CSSToSASSMapping} 158 * @return {!WebInspector.SASSLiveSourceMap.CSSToSASSMapping}
112 */ 159 */
113 rebaseForCSSDiff: function(cssDiff) 160 rebaseForCSSDiff: function(cssDiff)
114 { 161 {
115 var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(); 162 var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(css Diff.newAST, this._sassModels);
116 var cssNodes = this._cssToSass.keysArray(); 163 var cssNodes = this._cssToSass.keysArray();
117 for (var i = 0; i < cssNodes.length; ++i) { 164 for (var i = 0; i < cssNodes.length; ++i) {
118 var cssNode = cssNodes[i]; 165 var cssNode = cssNodes[i];
119 var sassNode = this._cssToSass.get(cssNode); 166 var sassNode = this._cssToSass.get(cssNode);
120 var mappedNode = cssDiff.mapping.get(cssNode); 167 var mappedNode = cssDiff.mapping.get(cssNode);
121 if (mappedNode && sassNode) 168 if (mappedNode && sassNode)
122 newMapping.mapCssToSass(mappedNode, sassNode); 169 newMapping.mapCssToSass(mappedNode, sassNode);
123 } 170 }
124 return newMapping; 171 return newMapping;
125 }, 172 },
126 173
127 /** 174 /**
128 * @param {!WebInspector.SASSSupport.ASTDiff} sassDiff 175 * @param {!WebInspector.SASSSupport.ASTDiff} sassDiff
129 * @return {!WebInspector.SASSLiveSourceMap.CSSToSASSMapping} 176 * @return {!WebInspector.SASSLiveSourceMap.CSSToSASSMapping}
130 */ 177 */
131 rebaseForSASSDiff: function(sassDiff) 178 rebaseForSASSDiff: function(sassDiff)
132 { 179 {
133 var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(); 180 var sassModels = new Map(this._sassModels);
181 sassModels.set(sassDiff.url, sassDiff.newAST);
182 var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(thi s._cssAST, sassModels);
134 var cssNodes = this._cssToSass.keysArray(); 183 var cssNodes = this._cssToSass.keysArray();
135 for (var i = 0; i < cssNodes.length; ++i) { 184 for (var i = 0; i < cssNodes.length; ++i) {
136 var cssNode = cssNodes[i]; 185 var cssNode = cssNodes[i];
137 var sassNode = this._cssToSass.get(cssNode); 186 var sassNode = this._cssToSass.get(cssNode);
138 var mappedNode = sassNode.document.url === sassDiff.url ? sassDiff.m apping.get(sassNode) : sassNode; 187 var mappedNode = sassNode.document.url === sassDiff.url ? sassDiff.m apping.get(sassNode) : sassNode;
139 if (mappedNode) 188 if (mappedNode)
140 newMapping.mapCssToSass(cssNode, mappedNode); 189 newMapping.mapCssToSass(cssNode, mappedNode);
141 } 190 }
142 return newMapping; 191 return newMapping;
143 }, 192 },
(...skipping 10 matching lines...) Expand all
154 continue; 203 continue;
155 if (cssNode !== cssNode.parent.name) 204 if (cssNode !== cssNode.parent.name)
156 continue; 205 continue;
157 var sassNode = this._cssToSass.get(cssNode); 206 var sassNode = this._cssToSass.get(cssNode);
158 if (sassNode && cssNode.text.trim() !== sassNode.text.trim()) 207 if (sassNode && cssNode.text.trim() !== sassNode.text.trim())
159 return false; 208 return false;
160 } 209 }
161 return true; 210 return true;
162 } 211 }
163 } 212 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/devtools/devtools.gypi ('k') | third_party/WebKit/Source/devtools/front_end/sass/SASSSupport.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698