Skip to content

Commit f83ed26

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored andcommitted
Support external expressions as children of DOM fragments
Bug: 400353541 Change-Id: Id29c4fa82500507fcde454afe21de6e0cac9d1e8 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6405673 Reviewed-by: Philip Pfaffe <[email protected]> Commit-Queue: Danil Somsikov <[email protected]>
1 parent 282ff27 commit f83ed26

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

scripts/eslint_rules/lib/no-imperative-dom-api.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,9 @@ export const DEFAULT_VIEW = (input, _output, target) => {
213213
},
214214
'Program:exit'() {
215215
for (const domFragment of DomFragment.values()) {
216+
if (!domFragment.tagName) {
217+
continue;
218+
}
216219
for (const reference of domFragment.references) {
217220
if (processReference(reference.node, domFragment)) {
218221
reference.processed = true;

scripts/eslint_rules/lib/no-imperative-dom-api/dom-fragment.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class DomFragment {
5555
result.references = key.references.filter(r => !key.identifiers.includes(r.identifier))
5656
.map(r => ({node: /** @type {EsLintNode} */ (r.identifier)}));
5757
result.initializer = /** @type {EsLintNode} */ (key.identifiers[0]);
58+
result.expression = key.name;
5859
}
5960
}
6061
if (key instanceof ClassMember) {

scripts/eslint_rules/tests/no-imperative-dom-api.test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,34 @@ class SomeWidget extends UI.Widget.Widget {
397397
const anotherElement = document.createElement('div');
398398
this.process(filterInput, anotherElement);
399399
}
400+
}`,
401+
errors: [{messageId: 'preferTemplateLiterals'}],
402+
},
403+
{
404+
filename: 'front_end/ui/components/component/file.ts',
405+
code: `
406+
class SomeWidget extends UI.Widget.Widget {
407+
constructor(label: HTMLElement) {
408+
super();
409+
this.contentElement.appendChild(label);
410+
label.addEventListener('click', () => this.doSomething.bind(this));
411+
}
412+
}`,
413+
output: `
414+
415+
export const DEFAULT_VIEW = (input, _output, target) => {
416+
render(html\`
417+
<div>
418+
\${label}
419+
</div>\`,
420+
target, {host: input});
421+
};
422+
423+
class SomeWidget extends UI.Widget.Widget {
424+
constructor(label: HTMLElement) {
425+
super();
426+
label.addEventListener('click', () => this.doSomething.bind(this));
427+
}
400428
}`,
401429
errors: [{messageId: 'preferTemplateLiterals'}],
402430
},

0 commit comments

Comments
 (0)