Skip to content

Commit d2d91d7

Browse files
Scheduler - Add ESLint naming-convention rule to forbid underscore-prefixed members
1 parent fde41ea commit d2d91d7

1 file changed

Lines changed: 112 additions & 2 deletions

File tree

packages/devextreme/eslint.config.mjs

Lines changed: 112 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,90 @@ const compat = new FlatCompat({
2626
allConfig: js.configs.all
2727
});
2828

29+
const schedulerDOMComponentOverrides = [
30+
'_createActionByOption',
31+
'_defaultOptionsRules',
32+
'_dimensionChanged',
33+
'_dispose',
34+
'_disposed',
35+
'_getDefaultOptions',
36+
'_init',
37+
'_initTemplates',
38+
'_optionChanged',
39+
'_setOptionsByReference',
40+
'_useTemplates',
41+
'_visibilityChanged',
42+
];
43+
44+
const schedulerWidgetOverrides = [
45+
'_activeStateUnit',
46+
'_clean',
47+
'_cleanFocusState',
48+
'_eventBindingTarget',
49+
'_fireContentReadyAction',
50+
'_focusInHandler',
51+
'_focusOutHandler',
52+
'_focusTarget',
53+
'_initMarkup',
54+
'_keyboardHandler',
55+
'_render',
56+
'_renderContent',
57+
'_renderFocusState',
58+
'_renderFocusTarget',
59+
'_supportedKeys',
60+
'_toggleVisibility',
61+
];
62+
63+
const schedulerCollectionWidgetOverrides = [
64+
'_cleanItemContainer',
65+
'_clearDropDownItemsElements',
66+
'_createItemByTemplate',
67+
'_executeItemRenderAction',
68+
'_filteredItems',
69+
'_findItemElementByItem',
70+
'_focusedItemIndexBeforeRender',
71+
'_getItemContent',
72+
'_itemClass',
73+
'_itemClickHandler',
74+
'_itemContainer',
75+
'_moveFocus',
76+
'_postprocessRenderItem',
77+
'_processItemClick',
78+
'_refreshActiveDescendant',
79+
'_renderDirection',
80+
'_renderItem',
81+
'_sortedItems',
82+
];
83+
84+
const schedulerR1Overrides = [
85+
'_propsInfo',
86+
'_value',
87+
'_viewComponent',
88+
];
89+
90+
const schedulerWorkspaceOverrides = [
91+
'_calculateStartViewDate',
92+
'_getAllDayHeight',
93+
'_getCellCount',
94+
'_getDateRange',
95+
'_getDisplayedDate',
96+
'_getGroupCount',
97+
'_getIntervalDuration',
98+
'_isHorizontalGroupedWorkSpace',
99+
'_setVisibilityDates',
100+
'_updateStateVirtualItems',
101+
];
102+
103+
const schedulerMemberAllowlist = [
104+
...schedulerDOMComponentOverrides,
105+
...schedulerWidgetOverrides,
106+
...schedulerCollectionWidgetOverrides,
107+
...schedulerR1Overrides,
108+
...schedulerWorkspaceOverrides,
109+
];
110+
const schedulerMemberAllowlistRegex =
111+
`^(_|__esModule|${schedulerMemberAllowlist.join('|')})$`;
112+
29113
export default [
30114
{
31115
ignores: [
@@ -556,7 +640,6 @@ export default [
556640
selector: ['variable', 'function', 'parameter'],
557641
format: null,
558642
leadingUnderscore: 'forbid',
559-
// allow only a single underscore identifier `_` to bypass this rule
560643
filter: {
561644
regex: '^_$',
562645
match: false,
@@ -565,13 +648,40 @@ export default [
565648
{
566649
selector: 'memberLike',
567650
format: null,
568-
leadingUnderscore: 'allow',
651+
leadingUnderscore: 'forbid',
652+
filter: {
653+
regex: schedulerMemberAllowlistRegex,
654+
match: false,
655+
},
569656
},
570657
],
571658
'devextreme-custom/no-deferred': 'error',
572659
'devextreme-custom/prefer-switch-true': ['error', { minBranches: 3 }],
573660
},
574661
},
662+
// Temporarily allow underscore members in appointments/ (pending refactoring)
663+
{
664+
files: ['js/__internal/scheduler/appointments/**/*.ts?(x)'],
665+
rules: {
666+
'@typescript-eslint/naming-convention': [
667+
'error',
668+
{
669+
selector: ['variable', 'function', 'parameter'],
670+
format: null,
671+
leadingUnderscore: 'forbid',
672+
filter: {
673+
regex: '^_$',
674+
match: false,
675+
},
676+
},
677+
{
678+
selector: 'memberLike',
679+
format: null,
680+
leadingUnderscore: 'allow',
681+
},
682+
],
683+
},
684+
},
575685
// Allow Deferred in m_* scheduler files only
576686
{
577687
files: ['js/__internal/scheduler/**/m_*.ts?(x)'],

0 commit comments

Comments
 (0)