Skip to content

Commit c035f3f

Browse files
mathiasbynensDevtools-frontend LUCI CQ
authored and
Devtools-frontend LUCI CQ
committed
Convert set-data-type-reference to TypeScript
Bug: chromium:397586315 Change-Id: I988ef22de34a41ad54e02f3072f0c0a835c68c72 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6434409 Reviewed-by: Nikolay Vitkov <nvitkov@chromium.org> Commit-Queue: Mathias Bynens <mathias@chromium.org>
1 parent d104248 commit c035f3f

File tree

3 files changed

+74
-89
lines changed

3 files changed

+74
-89
lines changed

scripts/eslint_rules/lib/set-data-type-reference.js

Lines changed: 0 additions & 83 deletions
This file was deleted.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Copyright 2020 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import {createRule} from './tsUtils.ts';
6+
7+
export default createRule({
8+
name: 'set-data-type-reference',
9+
meta: {
10+
type: 'problem',
11+
docs: {
12+
description: 'check data setters have an explicit type reference for their parameter',
13+
category: 'Possible Errors',
14+
},
15+
fixable: 'code',
16+
messages: {
17+
dataSetterMustTakeExplicitlyTypedParameter: 'A data setter must take a parameter that is explicitly typed.',
18+
dataSetterParamTypeMustBeDefined: 'The type of a parameter in a data setter must be explicitly defined.',
19+
dataSetterParamTypeMustBeTypeReference:
20+
'A data setter parameter’s type must be a type reference, not a literal type defined inline.',
21+
},
22+
schema: [], // no options
23+
},
24+
defaultOptions: [],
25+
create: function(context) {
26+
return {
27+
ClassDeclaration(node) {
28+
// Only enforce this rule for custom elements
29+
if (!node.superClass || node.superClass.type !== 'Identifier' || node.superClass.name !== 'HTMLElement') {
30+
return;
31+
}
32+
33+
const dataSetterDefinition = node.body.body.find(methodDefinition => {
34+
return (
35+
'kind' in methodDefinition && methodDefinition.kind === 'set' && 'key' in methodDefinition &&
36+
methodDefinition.key.type === 'Identifier' && methodDefinition.key.name === 'data');
37+
});
38+
39+
if (!dataSetterDefinition || dataSetterDefinition.type === 'StaticBlock') {
40+
return;
41+
}
42+
// @ts-expect-error needs proper check of eslint.type
43+
const dataSetterParam = dataSetterDefinition.value?.params?.[0];
44+
if (!dataSetterParam) {
45+
context.report({
46+
node: dataSetterDefinition,
47+
messageId: 'dataSetterMustTakeExplicitlyTypedParameter',
48+
});
49+
return;
50+
}
51+
52+
if (!dataSetterParam.typeAnnotation) {
53+
context.report({
54+
node: dataSetterDefinition,
55+
messageId: 'dataSetterParamTypeMustBeDefined',
56+
});
57+
return;
58+
}
59+
60+
if (dataSetterParam.typeAnnotation.typeAnnotation.type !== 'TSTypeReference') {
61+
context.report({
62+
node: dataSetterDefinition,
63+
messageId: 'dataSetterParamTypeMustBeTypeReference',
64+
});
65+
}
66+
},
67+
};
68+
},
69+
});

scripts/eslint_rules/tests/set-data-type-reference.test.js renamed to scripts/eslint_rules/tests/set-data-type-reference.test.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
// Copyright 2020 The Chromium Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
'use strict';
5-
const rule = require('../lib/set-data-type-reference.js');
4+
import rule from '../lib/set-data-type-reference.js';
65

7-
const {RuleTester} = require('./utils/utils.js');
6+
import {RuleTester} from './utils/tsUtils.ts';
87

98
new RuleTester().run('set-data-type-reference', rule, {
109
valid: [
@@ -31,7 +30,7 @@ new RuleTester().run('set-data-type-reference', rule, {
3130
filename: 'front_end/common/foo.ts',
3231
errors: [
3332
{
34-
message: 'The type of a parameter in a data setter must be explicitly defined.',
33+
messageId: 'dataSetterParamTypeMustBeDefined',
3534
},
3635
],
3736
},
@@ -42,7 +41,7 @@ new RuleTester().run('set-data-type-reference', rule, {
4241
filename: 'front_end/common/foo.ts',
4342
errors: [
4443
{
45-
message: 'A data setter must take a parameter that is explicitly typed.',
44+
messageId: 'dataSetterMustTakeExplicitlyTypedParameter',
4645
},
4746
],
4847
},
@@ -53,7 +52,7 @@ new RuleTester().run('set-data-type-reference', rule, {
5352
filename: 'front_end/common/foo.ts',
5453
errors: [
5554
{
56-
message: 'A data setter parameter\'s type must be a type reference, not a literal type defined inline.',
55+
messageId: 'dataSetterParamTypeMustBeTypeReference',
5756
},
5857
],
5958
},

0 commit comments

Comments
 (0)