Skip to content

Commit f645790

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored and
Devtools-frontend LUCI CQ
committed
Support private properties in no-imperative-dom-api rule and fix initializer removal
Bug: 407751147 Change-Id: I7c153236c26554058d691ac4c37af55c247219e6 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6439036 Auto-Submit: Danil Somsikov <dsv@chromium.org> Reviewed-by: Philip Pfaffe <pfaffe@chromium.org> Commit-Queue: Philip Pfaffe <pfaffe@chromium.org>
1 parent 3182316 commit f645790

File tree

3 files changed

+43
-4
lines changed

3 files changed

+43
-4
lines changed

scripts/eslint_rules/lib/no-imperative-dom-api/ast.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,14 @@ export function getEnclosingExpression(node: Node): Node|null {
3232
}
3333

3434
export function getEnclosingProperty(node: Node): Node|null {
35-
if (isMemberExpression(node, n => n.type === 'ThisExpression', n => n.type === 'Identifier')) {
35+
if (isMemberExpression(
36+
node, n => n.type === 'ThisExpression', n => ['Identifier', 'PrivateIdentifier'].includes(n.type))) {
3637
return node;
3738
}
3839
if (node.parent?.type === 'AssignmentExpression' && node.parent.right === node &&
39-
isMemberExpression(node.parent.left, n => n.type === 'ThisExpression', n => n.type === 'Identifier')) {
40+
isMemberExpression(
41+
node.parent.left, n => n.type === 'ThisExpression',
42+
n => ['Identifier', 'PrivateIdentifier'].includes(n.type))) {
4043
return node.parent.left;
4144
}
4245
return null;

scripts/eslint_rules/lib/no-imperative-dom-api/class-member.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ export class ClassMember {
4141
classMember = new ClassMember(classDeclaration);
4242
classMembers.set(memberName, classMember);
4343
}
44-
classMember.references.add(node);
45-
if (node.type === 'AssignmentExpression') {
44+
if (node.parent?.type === 'AssignmentExpression') {
4645
classMember.initializer = node;
46+
} else {
47+
classMember.references.add(node);
4748
}
4849
return classMember;
4950
}

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,41 @@ export const DEFAULT_VIEW = (input, _output, target) => {
505505
target, {host: input});
506506
};
507507
508+
class SomeWidget extends UI.Widget.Widget {
509+
constructor() {
510+
super();
511+
}
512+
}`,
513+
errors: [{messageId: 'preferTemplateLiterals'}],
514+
},
515+
{
516+
filename: 'front_end/ui/components/component/file.ts',
517+
code: `
518+
class SomeWidget extends UI.Widget.Widget {
519+
constructor() {
520+
super();
521+
const toolbar = this.contentElement.createChild('devtools-toolbar');
522+
this.filterInput = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.editName), 'edit', undefined, 'edit-name');
523+
toolbar.appendToolbarItem(this.filterInput);
524+
this.#banner = this.contentElement.createChild('div', 'banner');
525+
this.#banner.textContent = 'some-text';
526+
}
527+
}`,
528+
output: `
529+
530+
export const DEFAULT_VIEW = (input, _output, target) => {
531+
render(html\`
532+
<div>
533+
<devtools-toolbar>
534+
<devtools-button title=\${i18nString(UIStrings.editName)}
535+
.variant=\${Buttons.Button.Variant.TOOLBAR} .iconName=\${'edit'}
536+
.jslogContext=\${'edit-name'}></devtools-button>
537+
</devtools-toolbar>
538+
<div class="banner">some-text</div>
539+
</div>\`,
540+
target, {host: input});
541+
};
542+
508543
class SomeWidget extends UI.Widget.Widget {
509544
constructor() {
510545
super();

0 commit comments

Comments
 (0)