From 500edc0449fe05ecf08cb2cd212d2e95fc699a77 Mon Sep 17 00:00:00 2001 From: Ryan Albrecht Date: Thu, 13 Aug 2026 01:42:11 +0000 Subject: [PATCH 1/2] fix(coding-conventions): Address no-capitalized-function-calls in viewHierarchy utils --- static/app/components/events/viewHierarchy/utils.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/components/events/viewHierarchy/utils.tsx b/static/app/components/events/viewHierarchy/utils.tsx index 74f00e7f0a16..ff2d17575684 100644 --- a/static/app/components/events/viewHierarchy/utils.tsx +++ b/static/app/components/events/viewHierarchy/utils.tsx @@ -15,7 +15,7 @@ import {watchForResize} from 'sentry/utils/profiling/gl/utils'; import {Rect} from 'sentry/utils/profiling/speedscope'; export function useResizeCanvasObserver(canvases: Array): Rect { - const [bounds, setCanvasBounds] = useState(Rect.Empty()); + const [bounds, setCanvasBounds] = useState(new Rect(0, 0, 0, 0)); useLayoutEffect(() => { if (!canvases.length) { From 1b09fb14401d51e730917edab60654e691587908 Mon Sep 17 00:00:00 2001 From: Ryan Albrecht Date: Wed, 12 Aug 2026 22:09:13 -0700 Subject: [PATCH 2/2] ref(profiling): Rename Rect.Empty static method to Rect.empty The no-capitalized-function-calls rule flags capitalized function calls because they read as React component invocations. Rect.Empty() tripped it in viewHierarchy utils. Rename the static method itself rather than avoiding the call, matching the convention fix applied elsewhere. All 16 call sites are updated. FlamegraphChart.Empty and Flamegraph.Empty are separate symbols and are left untouched. --- static/app/components/events/viewHierarchy/utils.tsx | 2 +- static/app/components/profiling/boundTooltip.tsx | 2 +- .../components/profiling/flamegraph/continuousFlamegraph.tsx | 4 ++-- static/app/utils/profiling/canvasView.spec.tsx | 2 +- static/app/utils/profiling/canvasView.tsx | 4 ++-- static/app/utils/profiling/flamegraph.ts | 2 +- .../flamegraph/flamegraphStateProvider/flamegraphContext.tsx | 2 +- static/app/utils/profiling/flamegraphCanvas.tsx | 4 ++-- static/app/utils/profiling/flamegraphChart.tsx | 2 +- static/app/utils/profiling/gl/utils.spec.tsx | 4 ++-- static/app/utils/profiling/gl/utils.ts | 2 +- static/app/utils/profiling/speedscope.tsx | 2 +- static/app/utils/profiling/uiFrames.tsx | 4 ++-- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/static/app/components/events/viewHierarchy/utils.tsx b/static/app/components/events/viewHierarchy/utils.tsx index ff2d17575684..5364885ed156 100644 --- a/static/app/components/events/viewHierarchy/utils.tsx +++ b/static/app/components/events/viewHierarchy/utils.tsx @@ -15,7 +15,7 @@ import {watchForResize} from 'sentry/utils/profiling/gl/utils'; import {Rect} from 'sentry/utils/profiling/speedscope'; export function useResizeCanvasObserver(canvases: Array): Rect { - const [bounds, setCanvasBounds] = useState(new Rect(0, 0, 0, 0)); + const [bounds, setCanvasBounds] = useState(Rect.empty()); useLayoutEffect(() => { if (!canvases.length) { diff --git a/static/app/components/profiling/boundTooltip.tsx b/static/app/components/profiling/boundTooltip.tsx index 0d98d7f837e9..5f8843c692cc 100644 --- a/static/app/components/profiling/boundTooltip.tsx +++ b/static/app/components/profiling/boundTooltip.tsx @@ -74,7 +74,7 @@ interface BoundTooltipProps { children?: React.ReactNode; } -const DEFAULT_BOUNDS = Rect.Empty(); +const DEFAULT_BOUNDS = Rect.empty(); function BoundTooltip({ canvas, diff --git a/static/app/components/profiling/flamegraph/continuousFlamegraph.tsx b/static/app/components/profiling/flamegraph/continuousFlamegraph.tsx index e31bd1402840..bb19525a8b67 100644 --- a/static/app/components/profiling/flamegraph/continuousFlamegraph.tsx +++ b/static/app/components/profiling/flamegraph/continuousFlamegraph.tsx @@ -125,7 +125,7 @@ function getProfileOffset( startedAtMs: number | null ): Rect { if (!profile || !startedAtMs) { - return Rect.Empty(); + return Rect.empty(); } return new Rect(profile.startedAt - startedAtMs, 0, 0, 0); @@ -137,7 +137,7 @@ function getTransactionOffset( startedAtMs: number | null ): Rect { if (!transactionSpan || !startedAtMs) { - return Rect.Empty(); + return Rect.empty(); } return new Rect( diff --git a/static/app/utils/profiling/canvasView.spec.tsx b/static/app/utils/profiling/canvasView.spec.tsx index 5865823a744c..b12820be88a1 100644 --- a/static/app/utils/profiling/canvasView.spec.tsx +++ b/static/app/utils/profiling/canvasView.spec.tsx @@ -19,7 +19,7 @@ const makeCanvasAndView = ( canvas: HTMLCanvasElement, flamegraph: Flamegraph, origin: vec2 = vec2.fromValues(0, 0), - configSpaceTransform: Rect = Rect.Empty() + configSpaceTransform: Rect = Rect.empty() ) => { const flamegraphCanvas = new FlamegraphCanvas(canvas, origin); const canvasView = new CanvasView({ diff --git a/static/app/utils/profiling/canvasView.tsx b/static/app/utils/profiling/canvasView.tsx index c48ec74f0987..06b6797275b0 100644 --- a/static/app/utils/profiling/canvasView.tsx +++ b/static/app/utils/profiling/canvasView.tsx @@ -8,8 +8,8 @@ import { import {Rect} from 'sentry/utils/profiling/speedscope'; export class CanvasView { - configView: Rect = Rect.Empty(); - configSpace: Readonly = Rect.Empty(); + configView: Rect = Rect.empty(); + configSpace: Readonly = Rect.empty(); configSpaceTransform: mat3 = mat3.create(); inverted: boolean; diff --git a/static/app/utils/profiling/flamegraph.ts b/static/app/utils/profiling/flamegraph.ts index 0760b78f4d1c..47c48a248dbf 100644 --- a/static/app/utils/profiling/flamegraph.ts +++ b/static/app/utils/profiling/flamegraph.ts @@ -44,7 +44,7 @@ export class Flamegraph { sort: 'left heavy' | 'alphabetical' | 'call order' = 'call order'; depth = 0; - configSpace: Rect = Rect.Empty(); + configSpace: Rect = Rect.empty(); root: FlamegraphFrame = { key: -1, parent: null, diff --git a/static/app/utils/profiling/flamegraph/flamegraphStateProvider/flamegraphContext.tsx b/static/app/utils/profiling/flamegraph/flamegraphStateProvider/flamegraphContext.tsx index ea9171512d12..d042e8192cfc 100644 --- a/static/app/utils/profiling/flamegraph/flamegraphStateProvider/flamegraphContext.tsx +++ b/static/app/utils/profiling/flamegraph/flamegraphStateProvider/flamegraphContext.tsx @@ -19,7 +19,7 @@ export const DEFAULT_FLAMEGRAPH_STATE: FlamegraphState = { threadId: null, }, position: { - view: Rect.Empty(), + view: Rect.empty(), }, preferences: { timelines: { diff --git a/static/app/utils/profiling/flamegraphCanvas.tsx b/static/app/utils/profiling/flamegraphCanvas.tsx index 133c49068b37..186aacbec6d5 100644 --- a/static/app/utils/profiling/flamegraphCanvas.tsx +++ b/static/app/utils/profiling/flamegraphCanvas.tsx @@ -8,8 +8,8 @@ export class FlamegraphCanvas { canvas: HTMLCanvasElement; origin: vec2; - physicalSpace: Rect = Rect.Empty(); - logicalSpace: Rect = Rect.Empty(); + physicalSpace: Rect = Rect.empty(); + logicalSpace: Rect = Rect.empty(); physicalToLogicalSpace: mat3 = mat3.create(); logicalToPhysicalSpace: mat3 = mat3.create(); diff --git a/static/app/utils/profiling/flamegraphChart.tsx b/static/app/utils/profiling/flamegraphChart.tsx index 16c8fa7c8012..7a66b7d6bd35 100644 --- a/static/app/utils/profiling/flamegraphChart.tsx +++ b/static/app/utils/profiling/flamegraphChart.tsx @@ -58,7 +58,7 @@ export class FlamegraphChart { }; static MIN_RENDERABLE_POINTS = 2; - static Empty = new FlamegraphChart(Rect.Empty(), [], [[0, 0, 0, 0]]); + static Empty = new FlamegraphChart(Rect.empty(), [], [[0, 0, 0, 0]]); constructor( configSpace: Rect, diff --git a/static/app/utils/profiling/gl/utils.spec.tsx b/static/app/utils/profiling/gl/utils.spec.tsx index 866f2a281397..d205addaac89 100644 --- a/static/app/utils/profiling/gl/utils.spec.tsx +++ b/static/app/utils/profiling/gl/utils.spec.tsx @@ -216,8 +216,8 @@ describe('createShader', () => { describe('Rect', () => { it('initializes an empty rect as 0 width and height rect at 0,0 origin', () => { - expect(Rect.Empty()).toEqual(new Rect(0, 0, 0, 0)); - expect(Rect.Empty().isEmpty()).toBe(true); + expect(Rect.empty()).toEqual(new Rect(0, 0, 0, 0)); + expect(Rect.empty().isEmpty()).toBe(true); }); it('clones rect', () => { diff --git a/static/app/utils/profiling/gl/utils.ts b/static/app/utils/profiling/gl/utils.ts index 251f479de56d..ca7cf4a2ae14 100644 --- a/static/app/utils/profiling/gl/utils.ts +++ b/static/app/utils/profiling/gl/utils.ts @@ -318,7 +318,7 @@ export function safeGetContext( export function measureText(string: string, ctx?: CanvasRenderingContext2D): Rect { if (!string) { - return Rect.Empty(); + return Rect.empty(); } const context = ctx || getContext(document.createElement('canvas'), '2d'); diff --git a/static/app/utils/profiling/speedscope.tsx b/static/app/utils/profiling/speedscope.tsx index 30290efc6020..9d5372545e21 100644 --- a/static/app/utils/profiling/speedscope.tsx +++ b/static/app/utils/profiling/speedscope.tsx @@ -50,7 +50,7 @@ export class Rect { return this.width === 0 && this.height === 0; } - static Empty(): Rect { + static empty(): Rect { return new Rect(0, 0, 0, 0); } diff --git a/static/app/utils/profiling/uiFrames.tsx b/static/app/utils/profiling/uiFrames.tsx index 11a465a4e29f..99acf5fb74dc 100644 --- a/static/app/utils/profiling/uiFrames.tsx +++ b/static/app/utils/profiling/uiFrames.tsx @@ -31,7 +31,7 @@ class UIFrames { frames: readonly UIFrameNode[] = []; toUnit = 'nanoseconds'; minFrameDuration: number = Number.MAX_SAFE_INTEGER; - configSpace: Rect = Rect.Empty(); + configSpace: Rect = Rect.empty(); formatter = makeFormatter('nanoseconds'); timelineFormatter = makeTimelineFormatter('nanoseconds'); @@ -54,7 +54,7 @@ class UIFrames { slowOrDefaultFrames, frozenOrDefaultFrames ); - this.configSpace = configSpace ?? Rect.Empty(); + this.configSpace = configSpace ?? Rect.empty(); this.timelineFormatter = makeTimelineFormatter(this.toUnit); this.formatter = makeFormatter(this.toUnit);