Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
f7dbd4b
ref(explore): port toolTags to scraps layout primitives (#116160)
priscilawebdev May 26, 2026
63d95ff
fix(data_export): Cap export row limit at 10k for all callers (#116048)
manessaraj May 26, 2026
afc2a6a
build(eslint): add curly rule to prettier config section (#116158)
sentry-junior[bot] May 26, 2026
48a47b0
ref(autofix): Always use explorer mode in GroupAutofixEndpoint (#116162)
chromy May 26, 2026
1a2d800
ref(spans): split load_segment_data into helper steps (#116136)
lvthanh03 May 26, 2026
0644e58
feat(ourlogs): reduce modal export rows limit to 10k (#116180)
JoshuaKGoldberg May 26, 2026
ed7cb1a
build(oxfmt): ignore pyproject.toml (#116181)
sentry-junior[bot] May 26, 2026
787eb05
ref(segments): Add local cache for release creation and modification …
cmanallen May 26, 2026
a8862f2
feat(profiling): Add task for taskbroker passthrough mode (#115065)
untitaker May 26, 2026
92f5077
fix(dashboards): raise widget description limit to 350 (#116185)
DominikB2014 May 26, 2026
bbe0525
ref(issueDetails): collapse ParticipantList wrapper div to a Flex (#1…
evanpurkhiser May 26, 2026
b3d64f6
ref(autofix): Remove legacy autofix path from GroupAutofixEndpoint (#…
chromy May 26, 2026
8aaacdb
ref(pipeline): Use Button busy prop for advancing state (#116179)
evanpurkhiser May 26, 2026
cc102a7
ref(ourlogs): remove `expanded` and window virtualizer from LogsInfin…
JoshuaKGoldberg May 26, 2026
af7bb3f
feat(data-forwarding): Enable retries for data forwarders via task di…
leeandher May 26, 2026
ad22cb4
fix(issue-detection): Add plural KBLayouts_iPhone.dat to FileIO ignor…
roggenkemper May 26, 2026
58b055d
ref(replays): Replace useFetchSequentialPages with useInfiniteQuery (…
ryan953 May 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .oxfmtrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@
"api-docs/**/*.json",
".vscode/**",
"static/app/data/world.json",
"tests/sentry/grouping/**/*.json"
"tests/sentry/grouping/**/*.json",
"pyproject.toml"
]
}
1 change: 1 addition & 0 deletions eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -919,6 +919,7 @@ export default typescript.config([
name: 'plugin/prettier',
extends: [prettier],
rules: {
curly: 'error',
// import sorting is handled by oxfmt
'import/order': 'off',
'sort-imports': 'off',
Expand Down
42 changes: 31 additions & 11 deletions scripts/analyze-styled.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,8 +203,12 @@ function getCommitsInDateRange(startDate: string, intervalDays: number): GitComm

// CSV helper functions
function escapeCsvField(field: string | number): string {
if (typeof field === 'number') return field.toString();
if (field === null || field === undefined) return '';
if (typeof field === 'number') {
return field.toString();
}
if (field === null || field === undefined) {
return '';
}
const fieldStr = field.toString();
if (fieldStr.includes(',') || fieldStr.includes('"') || fieldStr.includes('\n')) {
return `"${fieldStr.replace(/"/g, '""')}"`;
Expand All @@ -213,7 +217,9 @@ function escapeCsvField(field: string | number): string {
}

function arrayToCSV(data: Array<Record<string, any>>): string {
if (data.length === 0) return '';
if (data.length === 0) {
return '';
}

const headers = Object.keys(data[0] ?? {});
const csvHeaders = headers.map(escapeCsvField).join(',');
Expand Down Expand Up @@ -647,7 +653,9 @@ class StyledComponentsDetector extends BaseDetector {
private cssRuleCounts = new Map<string, number>();

execute(node: ts.Node, context: DetectorContext): void {
if (!ts.isTaggedTemplateExpression(node)) return;
if (!ts.isTaggedTemplateExpression(node)) {
return;
}

const taggedExpr = node;

Expand All @@ -656,7 +664,9 @@ class StyledComponentsDetector extends BaseDetector {

if (callExpr.expression.getText() === 'styled') {
const component = callExpr.arguments[0];
if (!component) return;
if (!component) {
return;
}

let componentName = '';
let componentType: 'intrinsic' | 'component' | 'unknown' = 'unknown';
Expand Down Expand Up @@ -810,9 +820,13 @@ class StyledComponentsDetector extends BaseDetector {
let staticExpressions = 0;

this.styledComponents.forEach(sc => {
if (sc.componentType === 'component') totalReactComponents++;
else if (sc.componentType === 'intrinsic') totalIntrinsic++;
else unknownComponents++;
if (sc.componentType === 'component') {
totalReactComponents++;
} else if (sc.componentType === 'intrinsic') {
totalIntrinsic++;
} else {
unknownComponents++;
}

// Count expressions
if (sc.hasExpressions) {
Expand Down Expand Up @@ -1040,7 +1054,9 @@ class StyledUsagePerFileDetector extends BaseDetector {
// Track all TSX files we analyze
this.totalTsxFiles.add(context.fileName);

if (!ts.isTaggedTemplateExpression(node)) return;
if (!ts.isTaggedTemplateExpression(node)) {
return;
}

const taggedExpr = node;

Expand Down Expand Up @@ -1124,7 +1140,9 @@ class FlexOnlyDivsDetector extends BaseDetector {
private styledComponents: StyledComponent[] = [];

execute(node: ts.Node, context: DetectorContext): void {
if (!ts.isTaggedTemplateExpression(node)) return;
if (!ts.isTaggedTemplateExpression(node)) {
return;
}

const taggedExpr = node;

Expand All @@ -1133,7 +1151,9 @@ class FlexOnlyDivsDetector extends BaseDetector {

if (callExpr.expression.getText() === 'styled') {
const component = callExpr.arguments[0];
if (!component) return;
if (!component) {
return;
}

let componentName = '';
let componentType: 'intrinsic' | 'component' | 'unknown' = 'unknown';
Expand Down
32 changes: 24 additions & 8 deletions scripts/extractFormFields.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,22 @@ class FormFieldExtractor {

for (const sourceFile of this.program.getSourceFiles()) {
// Skip node_modules
if (sourceFile.fileName.includes('node_modules')) continue;
if (sourceFile.fileName.includes('node_modules')) {
continue;
}

// Only process app files
if (!sourceFile.fileName.includes('static/app/')) continue;
if (!sourceFile.fileName.includes('static/app/')) {
continue;
}

// Skip test and story files
if (sourceFile.fileName.includes('.spec.')) continue;
if (sourceFile.fileName.includes('.stories.')) continue;
if (sourceFile.fileName.includes('.spec.')) {
continue;
}
if (sourceFile.fileName.includes('.stories.')) {
continue;
}

const fileFields = this.extractFromFile(sourceFile);
fields.push(...fileFields);
Expand Down Expand Up @@ -169,7 +177,9 @@ class FormFieldExtractor {

// Extract 'name' attribute
const nameAttr = this.getJsxAttribute(node, 'name');
if (!nameAttr) return null;
if (!nameAttr) {
return null;
}

// Extract metadata from render prop children
const fieldMetadata = this.extractFieldMetadata(node, sourceFile);
Expand Down Expand Up @@ -219,7 +229,9 @@ class FormFieldExtractor {

// Extract label/hintText props from any component
const label = this.getJsxAttributeExpression(node, 'label', sourceFile);
if (label && !metadata.label) metadata.label = label;
if (label && !metadata.label) {
metadata.label = label;
}

if (this.hasJsxAttribute(node, 'hintText') && !metadata.hintText) {
const hintText = this.getJsxAttributeExpression(node, 'hintText', sourceFile);
Expand All @@ -230,7 +242,9 @@ class FormFieldExtractor {
// Extract label from Meta.Label (text is in children)
if (tagName?.endsWith('.Label') || tagName === 'Meta.Label') {
const text = this.getJsxTextContent(node, sourceFile);
if (text && !metadata.label) metadata.label = text;
if (text && !metadata.label) {
metadata.label = text;
}
}

// Extract hintText from Meta.HintText (text is in children)
Expand Down Expand Up @@ -269,7 +283,9 @@ class FormFieldExtractor {
// Direct text: <Meta.Label>Name</Meta.Label>
if (ts.isJsxText(child)) {
const text = child.text.trim();
if (text) return `"${text}"`;
if (text) {
return `"${text}"`;
}
}
// Expression: <Meta.Label>{t('Name')}</Meta.Label> -> t('Name')
if (ts.isJsxExpression(child) && child.expression) {
Expand Down
Loading
Loading