Skip to content

Commit 662c7e0

Browse files
feat(scraps): add a lint rule flagging hand-rolled / manual tables (#127760)
Adds a `@sentry/scraps/no-manual-table` incubator rule that flags tables built by hand instead of on `SimpleTable`. Existing violations are enrolled as suppressions. Closes DE-1728.
1 parent bd261d6 commit 662c7e0

7 files changed

Lines changed: 786 additions & 0 deletions

File tree

‎oxlint.config.ts‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,16 @@ const coreComponentFiles = [
2121

2222
const testFiles = ['**/*.spec.{ts,js,tsx,jsx}', 'tests/js/**/*.{ts,js,tsx,jsx}'];
2323

24+
const tableComponentFiles = [
25+
'static/app/components/core/table/**/*.{ts,tsx}',
26+
'static/app/components/tables/**/*.{ts,tsx}',
27+
];
28+
2429
// incubator rules disallow new violations from being introduced
2530
// but suppress pre-existing violations on `master`
2631
export const incubator = defineConfig({
2732
rules: {
33+
'@sentry/scraps/no-manual-table': 'error',
2834
'@sentry/scraps/prefer-primitives': 'error',
2935
'@sentry/scraps/prefer-container-responsive-props': 'error',
3036
},
@@ -33,6 +39,15 @@ export const incubator = defineConfig({
3339
files: coreComponentFiles,
3440
rules: {'@sentry/scraps/prefer-primitives': 'off'},
3541
},
42+
{
43+
files: [
44+
...tableComponentFiles,
45+
...testFiles,
46+
'**/*.stories.{ts,tsx}',
47+
'static/app/stories/**/*.{ts,tsx}',
48+
],
49+
rules: {'@sentry/scraps/no-manual-table': 'off'},
50+
},
3651
{
3752
files: testFiles,
3853
rules: fakeTimerRules,

‎static/app/oxlint-suppressions.json‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@
104104
"count": 4
105105
}
106106
},
107+
"components/checkInTimeline/checkInTooltip.tsx": {
108+
"@sentry/scraps/no-manual-table": {
109+
"count": 3
110+
}
111+
},
107112
"components/clippedBox.spec.tsx": {
108113
"@sentry/scraps/prefer-primitives": {
109114
"count": 2
@@ -430,6 +435,11 @@
430435
"count": 1
431436
}
432437
},
438+
"components/events/ourlogs/ourlogsSection.tsx": {
439+
"@sentry/scraps/no-manual-table": {
440+
"count": 1
441+
}
442+
},
433443
"components/events/traceEventDataSection.tsx": {
434444
"@sentry/scraps/prefer-primitives": {
435445
"count": 1
@@ -1188,11 +1198,17 @@
11881198
}
11891199
},
11901200
"components/resultGrid.tsx": {
1201+
"@sentry/scraps/no-manual-table": {
1202+
"count": 8
1203+
},
11911204
"@sentry/scraps/prefer-primitives": {
11921205
"count": 1
11931206
}
11941207
},
11951208
"components/resultTable.tsx": {
1209+
"@sentry/scraps/no-manual-table": {
1210+
"count": 1
1211+
},
11961212
"@sentry/scraps/prefer-container-responsive-props": {
11971213
"count": 1
11981214
}
@@ -1350,6 +1366,11 @@
13501366
"count": 2
13511367
}
13521368
},
1369+
"components/seer/repoTable/seerRepoTableHeader.tsx": {
1370+
"@sentry/scraps/no-manual-table": {
1371+
"count": 2
1372+
}
1373+
},
13531374
"components/seer/seerAutomationProjectList.tsx": {
13541375
"@sentry/scraps/prefer-primitives": {
13551376
"count": 2
@@ -1711,6 +1732,11 @@
17111732
"count": 2
17121733
}
17131734
},
1735+
"views/admin/adminRelays.tsx": {
1736+
"@sentry/scraps/no-manual-table": {
1737+
"count": 5
1738+
}
1739+
},
17141740
"views/admin/adminWarnings.tsx": {
17151741
"@sentry/scraps/prefer-primitives": {
17161742
"count": 3
@@ -2146,6 +2172,9 @@
21462172
}
21472173
},
21482174
"views/explore/logs/styles.tsx": {
2175+
"@sentry/scraps/no-manual-table": {
2176+
"count": 1
2177+
},
21492178
"@sentry/scraps/prefer-primitives": {
21502179
"count": 5
21512180
}
@@ -3190,6 +3219,9 @@
31903219
}
31913220
},
31923221
"views/settings/account/notifications/notificationSettingsByEntity.tsx": {
3222+
"@sentry/scraps/no-manual-table": {
3223+
"count": 1
3224+
},
31933225
"@sentry/scraps/prefer-primitives": {
31943226
"count": 1
31953227
}
@@ -3244,6 +3276,11 @@
32443276
"count": 1
32453277
}
32463278
},
3279+
"views/settings/components/teamSelect/teamSelectForMember.tsx": {
3280+
"@sentry/scraps/no-manual-table": {
3281+
"count": 1
3282+
}
3283+
},
32473284
"views/settings/dynamicSampling/organizationSampleRateInput.tsx": {
32483285
"@sentry/scraps/prefer-primitives": {
32493286
"count": 7
@@ -3389,6 +3426,11 @@
33893426
"count": 1
33903427
}
33913428
},
3429+
"views/settings/organizationTeams/teamMembers.tsx": {
3430+
"@sentry/scraps/no-manual-table": {
3431+
"count": 1
3432+
}
3433+
},
33923434
"views/settings/organizationTeams/teamMembersRow.tsx": {
33933435
"@sentry/scraps/prefer-primitives": {
33943436
"count": 1

‎static/gsAdmin/oxlint-suppressions.json‎

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,82 @@
99
"count": 13
1010
}
1111
},
12+
"components/beacons/beaconCheckins.tsx": {
13+
"@sentry/scraps/no-manual-table": {
14+
"count": 5
15+
}
16+
},
17+
"components/beacons/relatedBeacons.tsx": {
18+
"@sentry/scraps/no-manual-table": {
19+
"count": 6
20+
}
21+
},
1222
"components/changeBalanceAction.spec.tsx": {
1323
"@sentry/prefer-fake-timers": {
1424
"count": 1
1525
}
1626
},
27+
"components/customerGrid.tsx": {
28+
"@sentry/scraps/no-manual-table": {
29+
"count": 7
30+
}
31+
},
1732
"components/customerName.tsx": {
1833
"@sentry/scraps/prefer-primitives": {
1934
"count": 1
2035
}
2136
},
37+
"components/customers/customerAuditLog.tsx": {
38+
"@sentry/scraps/no-manual-table": {
39+
"count": 5
40+
}
41+
},
42+
"components/customers/customerCharges.tsx": {
43+
"@sentry/scraps/no-manual-table": {
44+
"count": 5
45+
}
46+
},
47+
"components/customers/customerHistory.tsx": {
48+
"@sentry/scraps/no-manual-table": {
49+
"count": 5
50+
}
51+
},
2252
"components/customers/customerIntegrationDebugDetails.tsx": {
53+
"@sentry/scraps/no-manual-table": {
54+
"count": 8
55+
},
2356
"@sentry/scraps/prefer-primitives": {
2457
"count": 1
2558
}
2659
},
60+
"components/customers/customerInvoices.tsx": {
61+
"@sentry/scraps/no-manual-table": {
62+
"count": 3
63+
}
64+
},
65+
"components/customers/customerMembers.tsx": {
66+
"@sentry/scraps/no-manual-table": {
67+
"count": 5
68+
}
69+
},
2770
"components/customers/customerOverview.tsx": {
71+
"@sentry/scraps/no-manual-table": {
72+
"count": 6
73+
},
2874
"@sentry/scraps/prefer-primitives": {
2975
"count": 1
3076
}
3177
},
78+
"components/customers/customerPolicies.tsx": {
79+
"@sentry/scraps/no-manual-table": {
80+
"count": 3
81+
}
82+
},
83+
"components/customers/customerProjects.tsx": {
84+
"@sentry/scraps/no-manual-table": {
85+
"count": 4
86+
}
87+
},
3288
"components/customers/customerStats.tsx": {
3389
"@sentry/scraps/prefer-primitives": {
3490
"count": 1
@@ -40,6 +96,9 @@
4096
}
4197
},
4298
"components/eventUsers.tsx": {
99+
"@sentry/scraps/no-manual-table": {
100+
"count": 4
101+
},
43102
"@sentry/scraps/prefer-primitives": {
44103
"count": 1
45104
}
@@ -54,6 +113,16 @@
54113
"count": 3
55114
}
56115
},
116+
"components/policies/policyRevisions.tsx": {
117+
"@sentry/scraps/no-manual-table": {
118+
"count": 5
119+
}
120+
},
121+
"components/promoCodes/promoCodeClaimants.tsx": {
122+
"@sentry/scraps/no-manual-table": {
123+
"count": 3
124+
}
125+
},
57126
"components/provisionSubscriptionAction.tsx": {
58127
"@sentry/scraps/prefer-primitives": {
59128
"count": 5
@@ -69,11 +138,39 @@
69138
"count": 1
70139
}
71140
},
141+
"components/users/userEmailLog.tsx": {
142+
"@sentry/scraps/no-manual-table": {
143+
"count": 9
144+
}
145+
},
146+
"components/users/userEmails.tsx": {
147+
"@sentry/scraps/no-manual-table": {
148+
"count": 4
149+
}
150+
},
151+
"views/beacons.tsx": {
152+
"@sentry/scraps/no-manual-table": {
153+
"count": 6
154+
}
155+
},
156+
"views/billingAdmins.tsx": {
157+
"@sentry/scraps/no-manual-table": {
158+
"count": 3
159+
}
160+
},
72161
"views/billingPlans.tsx": {
162+
"@sentry/scraps/no-manual-table": {
163+
"count": 13
164+
},
73165
"@sentry/scraps/prefer-primitives": {
74166
"count": 8
75167
}
76168
},
169+
"views/broadcasts.tsx": {
170+
"@sentry/scraps/no-manual-table": {
171+
"count": 5
172+
}
173+
},
77174
"views/customerContractDetails.tsx": {
78175
"@sentry/scraps/prefer-primitives": {
79176
"count": 2
@@ -84,21 +181,42 @@
84181
"count": 2
85182
}
86183
},
184+
"views/docIntegrations.tsx": {
185+
"@sentry/scraps/no-manual-table": {
186+
"count": 4
187+
}
188+
},
87189
"views/dynamicSamplingPanel.tsx": {
88190
"@sentry/scraps/prefer-primitives": {
89191
"count": 1
90192
}
91193
},
92194
"views/giftRecurringCredits.tsx": {
195+
"@sentry/scraps/no-manual-table": {
196+
"count": 10
197+
},
93198
"@sentry/scraps/prefer-primitives": {
94199
"count": 4
95200
}
96201
},
202+
"views/instanceLevelOAuth/instanceLevelOAuth.tsx": {
203+
"@sentry/scraps/no-manual-table": {
204+
"count": 3
205+
}
206+
},
97207
"views/invoiceComparison.tsx": {
208+
"@sentry/scraps/no-manual-table": {
209+
"count": 12
210+
},
98211
"@sentry/scraps/prefer-primitives": {
99212
"count": 1
100213
}
101214
},
215+
"views/invoiceDetails.tsx": {
216+
"@sentry/scraps/no-manual-table": {
217+
"count": 11
218+
}
219+
},
102220
"views/launchpadAdminPage.tsx": {
103221
"@sentry/scraps/prefer-primitives": {
104222
"count": 2
@@ -117,19 +235,62 @@
117235
"count": 1
118236
}
119237
},
238+
"views/options.tsx": {
239+
"@sentry/scraps/no-manual-table": {
240+
"count": 3
241+
}
242+
},
120243
"views/overview.tsx": {
244+
"@sentry/scraps/no-manual-table": {
245+
"count": 9
246+
},
121247
"@sentry/scraps/prefer-primitives": {
122248
"count": 2
123249
}
124250
},
251+
"views/policies.tsx": {
252+
"@sentry/scraps/no-manual-table": {
253+
"count": 3
254+
}
255+
},
125256
"views/privateAPIs.tsx": {
126257
"@sentry/scraps/prefer-primitives": {
127258
"count": 1
128259
}
129260
},
261+
"views/promoCodes.tsx": {
262+
"@sentry/scraps/no-manual-table": {
263+
"count": 6
264+
}
265+
},
130266
"views/relocationCreate.tsx": {
131267
"@sentry/scraps/prefer-primitives": {
132268
"count": 1
133269
}
270+
},
271+
"views/relocationDetails.tsx": {
272+
"@sentry/scraps/no-manual-table": {
273+
"count": 9
274+
}
275+
},
276+
"views/relocations.tsx": {
277+
"@sentry/scraps/no-manual-table": {
278+
"count": 7
279+
}
280+
},
281+
"views/sentryApps.tsx": {
282+
"@sentry/scraps/no-manual-table": {
283+
"count": 3
284+
}
285+
},
286+
"views/sentryEmployees.tsx": {
287+
"@sentry/scraps/no-manual-table": {
288+
"count": 8
289+
}
290+
},
291+
"views/users.tsx": {
292+
"@sentry/scraps/no-manual-table": {
293+
"count": 5
294+
}
134295
}
135296
}

0 commit comments

Comments
 (0)