Skip to content

Commit 0e1f3dc

Browse files
authored
ref(tracing): Remove nullish coalescing operator and add eslint rule (#6783)
Remove nullish coalescing operator in browser packages and add eslint rule
1 parent e491e60 commit 0e1f3dc

File tree

9 files changed

+63
-8
lines changed

9 files changed

+63
-8
lines changed

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

+4
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,10 @@ module.exports = {
143143
},
144144
],
145145

146+
// We want to prevent optional chaining & nullish coalescing usage in our files
147+
// to prevent uncessary bundle size. Turned off in tests.
146148
'@sentry-internal/sdk/no-optional-chaining': 'error',
149+
'@sentry-internal/sdk/no-nullish-coalescing': 'error',
147150

148151
// JSDOC comments are required for classes and methods. As we have a public facing codebase, documentation,
149152
// even if it may seems excessive at times, is important to emphasize. Turned off in tests.
@@ -177,6 +180,7 @@ module.exports = {
177180
'@typescript-eslint/no-non-null-assertion': 'off',
178181
'@typescript-eslint/no-empty-function': 'off',
179182
'@sentry-internal/sdk/no-optional-chaining': 'off',
183+
'@sentry-internal/sdk/no-nullish-coalescing': 'off',
180184
},
181185
},
182186
{

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

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
module.exports = {
1212
rules: {
1313
'no-optional-chaining': require('./rules/no-optional-chaining'),
14+
'no-nullish-coalescing': require('./rules/no-nullish-coalescing'),
1415
'no-eq-empty': require('./rules/no-eq-empty'),
1516
},
1617
};
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/nextjs/.eslintrc.js

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module.exports = {
1010
extends: ['../../.eslintrc.js'],
1111
rules: {
1212
'@sentry-internal/sdk/no-optional-chaining': 'off',
13+
'@sentry-internal/sdk/no-nullish-coalescing': 'off',
1314
},
1415
overrides: [
1516
{

packages/node/.eslintrc.js

+1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ module.exports = {
55
extends: ['../../.eslintrc.js'],
66
rules: {
77
'@sentry-internal/sdk/no-optional-chaining': 'off',
8+
'@sentry-internal/sdk/no-nullish-coalescing': 'off',
89
},
910
};

packages/tracing/src/browser/browsertracing.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ export class BrowserTracing implements Integration {
317317
op,
318318
trimEnd: true,
319319
metadata: {
320-
source: this._latestRouteSource ?? 'url',
320+
source: this._latestRouteSource || 'url',
321321
},
322322
};
323323

packages/tracing/src/browser/metrics/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ function _addPerformanceNavigationTiming(
304304
}
305305
_startChild(transaction, {
306306
op: 'browser',
307-
description: description ?? event,
307+
description: description || event,
308308
startTimestamp: timeOrigin + msToSec(start),
309309
endTimestamp: timeOrigin + msToSec(end),
310310
});

packages/tracing/src/span.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -294,17 +294,17 @@ export class Span implements SpanInterface {
294294
* @inheritDoc
295295
*/
296296
public updateWithContext(spanContext: SpanContext): this {
297-
this.data = spanContext.data ?? {};
297+
this.data = spanContext.data || {};
298298
this.description = spanContext.description;
299299
this.endTimestamp = spanContext.endTimestamp;
300300
this.op = spanContext.op;
301301
this.parentSpanId = spanContext.parentSpanId;
302302
this.sampled = spanContext.sampled;
303-
this.spanId = spanContext.spanId ?? this.spanId;
304-
this.startTimestamp = spanContext.startTimestamp ?? this.startTimestamp;
303+
this.spanId = spanContext.spanId || this.spanId;
304+
this.startTimestamp = spanContext.startTimestamp || this.startTimestamp;
305305
this.status = spanContext.status;
306-
this.tags = spanContext.tags ?? {};
307-
this.traceId = spanContext.traceId ?? this.traceId;
306+
this.tags = spanContext.tags || {};
307+
this.traceId = spanContext.traceId || this.traceId;
308308

309309
return this;
310310
}

packages/tracing/src/transaction.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ export class Transaction extends SpanClass implements TransactionInterface {
238238
public updateWithContext(transactionContext: TransactionContext): this {
239239
super.updateWithContext(transactionContext);
240240

241-
this.name = transactionContext.name ?? '';
241+
this.name = transactionContext.name || '';
242242

243243
this._trimEnd = transactionContext.trimEnd;
244244

0 commit comments

Comments
 (0)