Skip to content

Commit 6a75200

Browse files
committed
add eslint rule
1 parent 1f5da63 commit 6a75200

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

packages/eslint-config-sdk/src/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,11 @@ module.exports = {
143143
},
144144
],
145145

146-
// We want to prevent async await & optional chaining usage in our files to prevent uncessary bundle size. Turned off in tests.
146+
// We want to prevent async await & optional chaining & nullish coalescing usage in our files
147+
// to prevent uncessary bundle size. Turned off in tests.
147148
'@sentry-internal/sdk/no-async-await': 'error',
148149
'@sentry-internal/sdk/no-optional-chaining': 'error',
150+
'@sentry-internal/sdk/no-nullish-coalescing': 'error',
149151

150152
// JSDOC comments are required for classes and methods. As we have a public facing codebase, documentation,
151153
// even if it may seems excessive at times, is important to emphasize. Turned off in tests.
@@ -180,6 +182,7 @@ module.exports = {
180182
'@typescript-eslint/no-empty-function': 'off',
181183
'@sentry-internal/sdk/no-async-await': 'off',
182184
'@sentry-internal/sdk/no-optional-chaining': 'off',
185+
'@sentry-internal/sdk/no-nullish-coalescing': 'off',
183186
},
184187
},
185188
{

packages/eslint-plugin-sdk/src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module.exports = {
1212
rules: {
1313
'no-async-await': require('./rules/no-async-await'),
1414
'no-optional-chaining': require('./rules/no-optional-chaining'),
15+
'no-nullish-coalescing': require('./rules/no-nullish-coalescing'),
1516
'no-eq-empty': require('./rules/no-eq-empty'),
1617
},
1718
};
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* @fileoverview disallow nullish coalescing operators as they were introduced only in ES2020 and hence require
3+
* us to add a polyfill. This increases bundle size more than avoiding nullish coalescing operators all together.
4+
*
5+
* @author Lukas Stracke
6+
*
7+
* Based on: https://github.com/mysticatea/eslint-plugin-es/blob/v4.1.0/lib/rules/no-nullish-coalescing-operators.js
8+
*/
9+
'use strict';
10+
11+
// ------------------------------------------------------------------------------
12+
// Rule Definition
13+
// ------------------------------------------------------------------------------
14+
15+
module.exports = {
16+
meta: {
17+
type: 'problem',
18+
docs: {
19+
description: 'disallow nullish coalescing operators.',
20+
category: 'Best Practices',
21+
recommended: true,
22+
},
23+
messages: {
24+
forbidden: 'Avoid using nullish coalescing operators.',
25+
},
26+
fixable: null,
27+
schema: [],
28+
},
29+
create(context) {
30+
return {
31+
"LogicalExpression[operator='??']"(node) {
32+
context.report({
33+
node: context.getSourceCode().getTokenAfter(node.left, isNullishCoalescingOperator),
34+
messageId: 'forbidden',
35+
});
36+
},
37+
};
38+
},
39+
};
40+
41+
/**
42+
* Checks if the given token is a nullish coalescing operator or not.
43+
* @param {Token} token - The token to check.
44+
* @returns {boolean} `true` if the token is a nullish coalescing operator.
45+
*/
46+
function isNullishCoalescingOperator(token) {
47+
return token.value === '??' && token.type === 'Punctuator';
48+
}

packages/node/.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ module.exports = {
66
rules: {
77
'@sentry-internal/sdk/no-async-await': 'off',
88
'@sentry-internal/sdk/no-optional-chaining': 'off',
9+
'@sentry-internal/sdk/no-nullish-coalescing': 'off',
910
},
1011
};

0 commit comments

Comments
 (0)