fix: report component renaming conflicts for same-name components from different files - #2706
Conversation
🦋 Changeset detectedLatest commit: cf50a5b The changes in this PR will be included in the next version bump. This PR includes changesets to release 3 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Coverage Report
File Coverage
|
||||||||||||||||||||||||||||||||||||||
|
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1774945843 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1774945843
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1774945843
# or
npm install @redocly/respect-core@0.0.0-snapshot.1774945843 |
tatomyr
left a comment
There was a problem hiding this comment.
The issue here is that the bundler doesn't apply renaming consistently. If the schema wasn't referenced with a JSON pointer inside the file, it would behave correctly.
…g-conflicts-severity-ignored-the-reference
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1775209981 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1775209981
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1775209981
# or
npm install @redocly/respect-core@0.0.0-snapshot.1775209981 |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Autofix Details
Bugbot Autofix prepared a fix for the issue found in the latest run.
- ✅ Fixed: Hardcoded "schemas" in message for all component types
- Updated the conflict report text to use the actual
componentTypeand adjusted tests to assert the correct type-specific wording.
- Updated the conflict report text to use the actual
Or push these changes by commenting:
@cursor push c4dddad26a
Preview (c4dddad26a)
diff --git a/packages/core/src/__tests__/bundle-oas.test.ts b/packages/core/src/__tests__/bundle-oas.test.ts
--- a/packages/core/src/__tests__/bundle-oas.test.ts
+++ b/packages/core/src/__tests__/bundle-oas.test.ts
@@ -50,7 +50,7 @@
expect(problems).toHaveLength(1);
expect(problems[0].severity).toBe('warn');
expect(problems[0].message).toEqual(
- `Two schemas are referenced with the same name but different content. Renamed first to first-2.`
+ `Two examples are referenced with the same name but different content. Renamed first to first-2.`
);
expect(res.parsed).toMatchSnapshot();
});
@@ -62,7 +62,7 @@
});
expect(problems).toHaveLength(1);
expect(problems[0].message).toEqual(
- `Two schemas are referenced with the same name but different content. Renamed param-b to param-b-2.`
+ `Two parameters are referenced with the same name but different content. Renamed param-b to param-b-2.`
);
expect(res.parsed).toMatchSnapshot();
});
diff --git a/packages/core/src/__tests__/bundle.test.ts b/packages/core/src/__tests__/bundle.test.ts
--- a/packages/core/src/__tests__/bundle.test.ts
+++ b/packages/core/src/__tests__/bundle.test.ts
@@ -67,7 +67,7 @@
expect(problems).toHaveLength(1);
expect(problems[0].severity).toBe('warn');
expect(problems[0].message).toEqual(
- `Two schemas are referenced with the same name but different content. Renamed first to first-2.`
+ `Two examples are referenced with the same name but different content. Renamed first to first-2.`
);
expect(res.parsed).toMatchSnapshot();
});
@@ -96,7 +96,7 @@
expect(problems).toHaveLength(1);
expect(problems[0].severity).toBe('warn');
expect(problems[0].message).toEqual(
- `Two schemas are referenced with the same name but different content. Renamed param-b to param-b-2.`
+ `Two parameters are referenced with the same name but different content. Renamed param-b to param-b-2.`
);
expect(res.parsed).toMatchSnapshot();
});
@@ -119,7 +119,7 @@
expect(problems).toHaveLength(1);
expect(problems[0].severity).toBe('error');
expect(problems[0].message).toEqual(
- `Two schemas are referenced with the same name but different content. Renamed param-b to param-b-2.`
+ `Two parameters are referenced with the same name but different content. Renamed param-b to param-b-2.`
);
});
@@ -134,7 +134,7 @@
expect(problems).toHaveLength(1);
expect(problems[0].severity).toBe('warn');
expect(problems[0].message).toEqual(
- `Two schemas are referenced with the same name but different content. Renamed User to User-2.`
+ `Two parameters are referenced with the same name but different content. Renamed User to User-2.`
);
expect(res.parsed).toMatchSnapshot();
});
@@ -163,7 +163,7 @@
expect(problems).toHaveLength(1);
expect(problems[0].severity).toBe('error');
expect(problems[0].message).toEqual(
- `Two schemas are referenced with the same name but different content. Renamed User to User-2.`
+ `Two parameters are referenced with the same name but different content. Renamed User to User-2.`
);
});
diff --git a/packages/core/src/bundle/bundle-visitor.ts b/packages/core/src/bundle/bundle-visitor.ts
--- a/packages/core/src/bundle/bundle-visitor.ts
+++ b/packages/core/src/bundle/bundle-visitor.ts
@@ -287,7 +287,7 @@
if (!componentsGroup[name] && prevName !== name) {
ctx.report({
- message: `Two schemas are referenced with the same name but different content. Renamed ${prevName} to ${name}.`,
+ message: `Two ${componentType} are referenced with the same name but different content. Renamed ${prevName} to ${name}.`,
location: ctx.location,
forceSeverity: componentRenamingConflicts,
});This Bugbot Autofix run was free. To enable autofix for future PRs, go to the Cursor dashboard.
…g-conflicts-severity-ignored-the-reference
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1775468574 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1775468574
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1775468574
# or
npm install @redocly/respect-core@0.0.0-snapshot.1775468574 |
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1775489865 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1775489865
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1775489865
# or
npm install @redocly/respect-core@0.0.0-snapshot.1775489865 |
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1775493945 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1775493945
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1775493945
# or
npm install @redocly/respect-core@0.0.0-snapshot.1775493945 |
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1775558887 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1775558887
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1775558887
# or
npm install @redocly/respect-core@0.0.0-snapshot.1775558887 |
…g-conflicts-severity-ignored-the-reference
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1776152411 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1776152411
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1776152411
# or
npm install @redocly/respect-core@0.0.0-snapshot.1776152411 |
Co-authored-by: Andrew Tatomyr <andrew.tatomyr@redocly.com>
…g-conflicts-severity-ignored-the-reference
|
📦 A new experimental 🧪 version v0.0.0-snapshot.1776165174 of Redocly CLI has been published for testing. Install with NPM: npm install @redocly/cli@0.0.0-snapshot.1776165174
# or
npm install @redocly/openapi-core@0.0.0-snapshot.1776165174
# or
npm install @redocly/respect-core@0.0.0-snapshot.1776165174 |

What/Why/How?
The
bundlecommand now reports component renaming conflicts whenever two external definitions share the same name but have different content.Also, another issue was that we created two types of uniq names. For
pointer- it was withprefix, and for other cases wassuffixRemoved logic to create prefix for the component name when the component name has the same name
Tested with other products
Reference
close #2691
Testing
Without
--component-renaming-conflicts-severityruleWith
--component-renaming-conflicts-severity=errorruleWith
--component-renaming-conflicts-severity=warnruleWith
--component-renaming-conflicts-severity=offruleScreenshots (optional)
Check yourself
Security
Note
Medium Risk
Changes bundling component naming and conflict detection, which can alter generated component names and
$refpaths in bundled outputs. Risk is moderate due to potential breaking snapshot/output diffs for consumers relying on stable bundled names.Overview
Bundling now detects and reports component renaming conflicts when external components share the same name but have different content, honoring
--component-renaming-conflicts-severityfor these cases.Component name generation was simplified to derive names from the JSON pointer basename (falling back to the file basename) and then apply a consistent
-2,-3, … suffix for conflicts; this changes some autogen component keys and resulting$reftargets.Tests and fixtures were updated/added to cover pointer-based external refs conflicts and ensure dotted schema keys (e.g.
my.org.User) are preserved, and snapshots were updated to reflect the new naming/warning behavior.Reviewed by Cursor Bugbot for commit cf50a5b. Bugbot is set up for automated code reviews on this repo. Configure here.