Skip to content

fix: Improve state management in Imports, DataType, and DataModel classes#2705

Merged
koxudaxi merged 3 commits intomainfrom
fix/core-classes-bugs
Dec 19, 2025
Merged

fix: Improve state management in Imports, DataType, and DataModel classes#2705
koxudaxi merged 3 commits intomainfrom
fix/core-classes-bugs

Conversation

@koxudaxi
Copy link
Copy Markdown
Owner

@koxudaxi koxudaxi commented Dec 19, 2025

Summary by CodeRabbit

  • Bug Fixes

    • Improved safety in import removal to avoid crashes and ensure related metadata/reference tracking is cleaned up
    • Fixed string-parsing edge case to prevent index errors in union/optional handling
  • New Features

    • copy-deep now preserves nested extras and pattern dict keys when duplicating models
    • Added support for creating reused/inherited frozen dataclasses; new generated frozen-dataclass modules included
  • Tests

    • Added tests for import edge cases, short-string union parsing, deep-copy behavior, and frozen-dataclass reuse generation

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Dec 19, 2025

Walkthrough

Adds safer import-management cleanup with reference_path migration for future imports, extends deep-copy and reuse-model propagation for data models (including dataclasses), tightens a union-parsing bounds check, and adds tests plus expected fixtures for reuse/frozen dataclass and import/type edge cases.

Changes

Cohort / File(s) Summary
Import system
src/datamodel_code_generator/imports.py
Hardened remove(): safety checks for counters, uses (None, import_) for future imports, removes alias and reference_paths entries when counts drop to zero, and applies symmetric cleanup for (from_, import_) keys. extract_future() now moves associated reference_path entries to the future imports collection.
Model base changes
src/datamodel_code_generator/model/base.py
DataModelFieldBase.copy_deep() now deep-copies extras and, when present, data_type.dict_key. DataModel.create_reuse_model() now forwards custom_base_class, keyword_only, and treat_dot_as_module to the reused model instance.
Dataclass reuse
src/datamodel_code_generator/model/dataclass.py
Added create_reuse_model(base_ref: Reference) -> DataClass: returns a reuse model (no fields, base_classes=[base_ref], reference_path appended with /reuse) while preserving dataclass-specific metadata (description, frozen, templates, args).
Type parsing safety
src/datamodel_code_generator/types.py
_remove_none_from_union() adds length checks before indexing short current_part strings to avoid index errors on edge-case inputs.
Generated fixtures (frozen dataclasses)
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/*
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/__init__.py, .../schema_a.py, .../schema_b.py, .../shared.py
New expected output files defining frozen dataclasses (SharedModel and Model variants) for the --reuse-scope=tree + --frozen dataclass scenario.
New schema & generated model
tests/data/jsonschema/copy_deep_pattern_properties.json, tests/data/expected/main/jsonschema/copy_deep_pattern_properties.py
Added JSON Schema with patternProperties and corresponding generated Pydantic models exercising dict_key preservation through copy_deep.
Tests
tests/main/jsonschema/test_main_jsonschema.py, tests/test_imports.py, tests/test_types.py, tests/model/test_base.py
New tests: deep-copy behavior for dict_key and extras, reuse-scope frozen dataclass generation, import removal/reference_path cleanup and idempotency, and short-string edge-case coverage for _remove_none_from_union().

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–30 minutes

  • Areas needing focused review:
    • src/datamodel_code_generator/imports.py: counter decrement logic, correct removal from alias/from_ sets, and reference_paths migration to future imports.
    • src/datamodel_code_generator/model/dataclass.py and model/base.py: propagation of configuration options and correctness of created reuse models (reference_path, frozen, dataclass args).
    • src/datamodel_code_generator/types.py: ensure added bounds checks preserve intended parsing for both union syntaxes.
    • New tests and expected fixtures: confirm they reflect intended generation output and edge-case behavior.

Poem

🐰

I hopped through imports, careful and neat,
Moved future paths where old footprints meet,
I copied extras and tucked keys away,
I nudged short strings so they won't fray,
Frozen models dream in reuse's soft light. ✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main changes across multiple core classes: Imports (remove and extract_future methods), DataType (tightened parsing guards), and DataModel (parameter forwarding and new reuse method).
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/core-classes-bugs

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8f8a4de and 1c7df54.

📒 Files selected for processing (5)
  • src/datamodel_code_generator/model/dataclass.py (2 hunks)
  • tests/data/expected/main/jsonschema/copy_deep_pattern_properties.py (1 hunks)
  • tests/data/jsonschema/copy_deep_pattern_properties.json (1 hunks)
  • tests/main/jsonschema/test_main_jsonschema.py (2 hunks)
  • tests/model/test_base.py (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/datamodel_code_generator/model/dataclass.py
  • tests/main/jsonschema/test_main_jsonschema.py
🧰 Additional context used
🧬 Code graph analysis (1)
tests/model/test_base.py (2)
src/datamodel_code_generator/types.py (1)
  • DataType (282-609)
src/datamodel_code_generator/model/base.py (3)
  • field (286-288)
  • DataModelFieldBase (128-351)
  • copy_deep (327-337)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: benchmarks
  • GitHub Check: 3.11 on macOS
  • GitHub Check: 3.12 on macOS
  • GitHub Check: 3.11 on Windows
  • GitHub Check: 3.14 on Windows
  • GitHub Check: 3.10 on Windows
  • GitHub Check: 3.13 on Windows
  • GitHub Check: 3.12 on Windows
  • GitHub Check: Analyze (python)
🔇 Additional comments (4)
tests/model/test_base.py (2)

343-354: LGTM! Well-structured test for dict_key deep copying.

The test properly verifies that copy_deep() creates an independent copy of dict_key rather than sharing the reference, which prevents mutation issues when reusing data types.


356-370: LGTM! Excellent test with mutation verification.

The test properly validates deep copying of extras and includes a mutation test to confirm the copied extras is truly independent. This prevents subtle bugs where modifying a copied field could affect the original.

tests/data/jsonschema/copy_deep_pattern_properties.json (1)

1-50: LGTM! Valid test fixture for pattern properties and allOf.

The JSON schema effectively tests complex scenarios: pattern properties (which generate dict_key constraints), allOf inheritance, and readOnly fields. This fixture is well-suited for validating that copy_deep correctly handles nested data types with dict_key constraints during schema composition.

tests/data/expected/main/jsonschema/copy_deep_pattern_properties.py (1)

1-38: LGTM! Expected output correctly reflects the JSON schema.

The generated Pydantic models properly represent:

  • Pattern-constrained dictionary keys using constr(pattern=...)
  • Read/write model splitting (Request vs full models)
  • Inheritance via allOf (ExtendedMetadata extends Metadata)
  • Required vs optional fields (id is required, owner is optional)

This fixture validates that the code generator preserves dict_key constraints through complex schema composition, which is essential for the copy_deep improvements in this PR.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

from datamodel_code_generator.model.pydantic.base_model import Constraints # noqa: TC001 # needed for pydantic
from datamodel_code_generator.model.types import DataTypeManager as _DataTypeManager
from datamodel_code_generator.model.types import type_map_factory
from datamodel_code_generator.reference import Reference

Check notice

Code scanning / CodeQL

Cyclic import Note

Import of module
datamodel_code_generator.reference
begins an import cycle.

Copilot Autofix

AI 5 months ago

In general, cycles caused by type-like utilities can be fixed by making the dependency one-way at runtime: either move shared types into a more central module, or ensure one side only imports the other for type checking (using TYPE_CHECKING and from __future__ import annotations) or local, function‑scope imports.

The single best minimal fix here, without changing existing functionality, is to stop importing Reference at module level and instead import it only for typing. Because this file already uses from __future__ import annotations, we can safely annotate with "Reference" as a string and import Reference only inside the TYPE_CHECKING block. That way, the runtime import graph no longer includes datamodel_code_generator.reference from dataclass.py, breaking the cycle, while static type checkers still see the correct type. This does not change runtime behavior: Reference is only needed for type annotations and as a constructor call, and with postponed evaluation, using the forward‑referenced annotation as a string is sufficient.

Concretely in src/datamodel_code_generator/model/dataclass.py:

  • Remove the top-level from datamodel_code_generator.reference import Reference import.
  • Inside the existing if TYPE_CHECKING: block, add from datamodel_code_generator.reference import Reference.
  • Update any type annotations that directly reference Reference to use a forward reference string "Reference" instead of the bare name, so they remain valid even if the name is not bound at runtime (although with from __future__ import annotations, this is largely for clarity and robustness).
  • No other logic, parameters, or behavior needs to change.
Suggested changeset 1
src/datamodel_code_generator/model/dataclass.py

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/src/datamodel_code_generator/model/dataclass.py b/src/datamodel_code_generator/model/dataclass.py
--- a/src/datamodel_code_generator/model/dataclass.py
+++ b/src/datamodel_code_generator/model/dataclass.py
@@ -21,13 +21,13 @@
 from datamodel_code_generator.model.pydantic.base_model import Constraints  # noqa: TC001 # needed for pydantic
 from datamodel_code_generator.model.types import DataTypeManager as _DataTypeManager
 from datamodel_code_generator.model.types import type_map_factory
-from datamodel_code_generator.reference import Reference
 from datamodel_code_generator.types import DataType, StrictTypes, Types, chain_as_tuple
 
 if TYPE_CHECKING:
     from collections import defaultdict
     from collections.abc import Sequence
     from pathlib import Path
+    from datamodel_code_generator.reference import Reference
 
 
 def has_field_assignment(field: DataModelFieldBase) -> bool:
EOF
@@ -21,13 +21,13 @@
from datamodel_code_generator.model.pydantic.base_model import Constraints # noqa: TC001 # needed for pydantic
from datamodel_code_generator.model.types import DataTypeManager as _DataTypeManager
from datamodel_code_generator.model.types import type_map_factory
from datamodel_code_generator.reference import Reference
from datamodel_code_generator.types import DataType, StrictTypes, Types, chain_as_tuple

if TYPE_CHECKING:
from collections import defaultdict
from collections.abc import Sequence
from pathlib import Path
from datamodel_code_generator.reference import Reference


def has_field_assignment(field: DataModelFieldBase) -> bool:
Copilot is powered by AI and may make mistakes. Always verify output.
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/datamodel_code_generator/types.py (1)

210-214: LGTM! Proper bounds checking prevents IndexError on short strings.

The added length check len(current_part) < 2 correctly guards against accessing current_part[-2] on very short strings. The short-circuit evaluation ensures the index access is never attempted when the string is too short.

Per static analysis hints, the # noqa: PLR2004 directives are unused since PLR2004 isn't enabled. You can remove them if desired.

🔎 Optional: Remove unused noqa directives
-            if current_part.strip().startswith("constr(") and (len(current_part) < 2 or current_part[-2] != "\\"):  # noqa: PLR2004
+            if current_part.strip().startswith("constr(") and (len(current_part) < 2 or current_part[-2] != "\\"):
                 in_constr += 1
         elif char == ")":
-            if in_constr > 0 and (len(current_part) < 2 or current_part[-2] != "\\"):  # noqa: PLR2004
+            if in_constr > 0 and (len(current_part) < 2 or current_part[-2] != "\\"):
                 in_constr -= 1
src/datamodel_code_generator/imports.py (1)

91-124: Well-implemented safety guards for import removal.

The defensive checks properly prevent negative counters and clean up stale state. The cascading cleanup (counter → set entry → empty container → alias → reference_paths) is thorough.

One observation: the reference_path cleanup on lines 122-123 occurs unconditionally, even when self.counter.get(key, 0) <= 0 causes an early continue. This means a reference_path won't be cleaned up if the import was already removed or never existed. This seems intentional since the reference_path cleanup should only happen when actually removing an import, but verify this is the expected behavior.

Per static analysis, the # noqa: PLR0912 is unused and can be removed.

🔎 Optional: Remove unused noqa directive
-    def remove(self, imports: Import | Iterable[Import]) -> None:  # noqa: PLR0912
+    def remove(self, imports: Import | Iterable[Import]) -> None:
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 42a228e and 935384a.

📒 Files selected for processing (11)
  • src/datamodel_code_generator/imports.py (2 hunks)
  • src/datamodel_code_generator/model/base.py (2 hunks)
  • src/datamodel_code_generator/model/dataclass.py (2 hunks)
  • src/datamodel_code_generator/types.py (1 hunks)
  • tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/__init__.py (1 hunks)
  • tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_a.py (1 hunks)
  • tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_b.py (1 hunks)
  • tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/shared.py (1 hunks)
  • tests/main/jsonschema/test_main_jsonschema.py (1 hunks)
  • tests/test_imports.py (1 hunks)
  • tests/test_types.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_b.py (2)
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_a.py (2)
  • Model (19-20)
  • SharedModel (14-15)
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/shared.py (1)
  • SharedModel (12-14)
src/datamodel_code_generator/model/base.py (1)
src/datamodel_code_generator/parser/base.py (1)
  • data_type (978-980)
tests/test_imports.py (1)
src/datamodel_code_generator/imports.py (5)
  • Imports (41-169)
  • append (74-89)
  • Import (20-38)
  • remove (91-123)
  • extract_future (130-144)
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_a.py (2)
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/shared.py (1)
  • SharedModel (12-14)
tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_b.py (1)
  • Model (14-15)
🪛 Ruff (0.14.8)
src/datamodel_code_generator/types.py

210-210: Unused noqa directive (non-enabled: PLR2004)

Remove unused noqa directive

(RUF100)


213-213: Unused noqa directive (non-enabled: PLR2004)

Remove unused noqa directive

(RUF100)

src/datamodel_code_generator/imports.py

91-91: Unused noqa directive (non-enabled: PLR0912)

Remove unused noqa directive

(RUF100)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (13)
  • GitHub Check: 3.12 on Windows
  • GitHub Check: 3.11 on Windows
  • GitHub Check: py312-black23 on Ubuntu
  • GitHub Check: py312-pydantic1 on Ubuntu
  • GitHub Check: 3.10 on Ubuntu
  • GitHub Check: py312-isort7 on Ubuntu
  • GitHub Check: py312-isort6 on Ubuntu
  • GitHub Check: py312-isort5 on Ubuntu
  • GitHub Check: py312-black24 on Ubuntu
  • GitHub Check: 3.10 on Windows
  • GitHub Check: 3.11 on Ubuntu
  • GitHub Check: benchmarks
  • GitHub Check: Analyze (python)
🔇 Additional comments (12)
tests/test_types.py (1)

138-154: LGTM! Comprehensive edge-case test coverage.

The parametrized test cases effectively verify the bounds-safety fix by testing short strings like "(", ")", "()" that would have caused IndexError before the fix. Good coverage of both use_union_operator modes.

src/datamodel_code_generator/imports.py (1)

141-143: LGTM! Proper migration of reference_paths in extract_future.

The new logic correctly transfers reference_path entries for __future__ imports to the new future Imports instance, maintaining referential integrity across the extraction.

tests/test_imports.py (1)

101-157: LGTM! Excellent edge-case test coverage for import management.

The new tests thoroughly cover:

  • Safe handling of non-existent imports (no crash)
  • Safe handling of double removal (no crash, no negative counters)
  • Proper cleanup of internal counter entries
  • Proper cleanup of reference_paths
  • Correct migration of reference_paths during extract_future()

These tests directly validate the defensive improvements made in imports.py.

tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_a.py (1)

1-20: LGTM! Well-structured test fixture for frozen dataclass reuse scope.

The generated code correctly:

  • Uses @dataclass(frozen=True) for immutability
  • Aliases the imported SharedModel as SharedModel_1 to avoid collision with the local class definition
  • Defines the inheritance relationship properly

This fixture aligns with the related schema_b.py and shared.py files for comprehensive reuse-scope testing.

tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/__init__.py (1)

1-3: LGTM! Standard test expected output.

This init.py file follows the standard pattern for generated test expected outputs.

tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/shared.py (1)

11-14: LGTM! Correct frozen dataclass definition.

The frozen dataclass is correctly defined with frozen=True, which is the key aspect being tested in the frozen reuse scope scenario.

tests/data/expected/main/jsonschema/reuse_scope_tree_dataclass_frozen/schema_b.py (1)

10-15: LGTM! Correct frozen dataclass with shared model reference.

The frozen dataclass correctly imports and references the shared.SharedModel while maintaining the frozen property.

tests/main/jsonschema/test_main_jsonschema.py (1)

3926-3941: LGTM! Well-structured test for frozen dataclass reuse.

The test correctly exercises the frozen dataclass reuse scenario by:

  • Reusing existing input data from reuse_scope_tree_dataclass
  • Adding the --frozen flag to verify frozen inheritance is preserved
  • Using appropriate expected output directory

The docstring clearly explains the test's purpose.

src/datamodel_code_generator/model/base.py (2)

327-337: LGTM! Improved deep copy ensures nested structures are preserved.

The changes strengthen the deep copy implementation:

  1. Line 331: Deep copying extras (instead of shallow copy) ensures nested dictionaries or lists within extras won't be shared between the original and copy.

  2. Lines 335-336: Deep copying dict_key when present ensures this nested DataType is also properly isolated.

These changes prevent mutation bugs where modifying a copied field could inadvertently affect the original.


544-558: LGTM! Configuration propagation ensures reused models inherit settings.

The forwarding of these three parameters ensures that reused models (created for inheritance scenarios) preserve the original model's configuration:

  • Line 555: custom_base_class - preserves custom base class
  • Line 556: keyword_only - maintains keyword-only field behavior
  • Line 557: treat_dot_as_module - preserves module naming strategy

This is essential for scenarios like frozen dataclass reuse (tested in the new test), where the frozen setting needs to be preserved when models are reused through inheritance.

src/datamodel_code_generator/model/dataclass.py (2)

24-24: LGTM! Import moved to runtime for use in create_reuse_model.

The Reference import is now at module level (instead of TYPE_CHECKING-only) because the new create_reuse_model method instantiates Reference(...) at runtime. TYPE_CHECKING imports are only available during static type checking, not at runtime.


93-109: LGTM! Dataclass-specific reuse model creation with frozen support.

This method overrides the base class implementation to forward dataclass-specific configuration:

  • Line 106: Forwards frozen=self.frozen - crucial for the frozen dataclass reuse scenario tested in the new test
  • Line 108: Forwards dataclass_arguments - preserves all dataclass decorator arguments
  • Lines 95-97: Creates inherited model with empty fields pointing to base reference
  • Line 101: Reference path correctly appended with "/reuse"

This ensures that when dataclass models are reused through inheritance (e.g., with --reuse-scope=tree), they preserve the frozen and other dataclass-specific settings from the original model.

@codecov
Copy link
Copy Markdown

codecov Bot commented Dec 19, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.44%. Comparing base (42a228e) to head (1c7df54).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2705   +/-   ##
=======================================
  Coverage   99.43%   99.44%           
=======================================
  Files          81       81           
  Lines       11381    11449   +68     
  Branches     1359     1363    +4     
=======================================
+ Hits        11317    11385   +68     
  Misses         38       38           
  Partials       26       26           
Flag Coverage Δ
unittests 99.44% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread src/datamodel_code_generator/model/dataclass.py Fixed
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/datamodel_code_generator/model/dataclass.py (1)

94-112: Implementation looks good; minor cleanup note on noqa directive.

The method correctly propagates all dataclass-specific configuration (including frozen and dataclass_arguments) to the reused model, aligning with the parent class enhancements.

Cyclic import context:
The local import of Reference at line 96 works around a circular dependency (already noted in past reviews and flagged by CodeQL). While this pattern is a common Python workaround, it reflects an architectural coupling worth keeping in mind for future refactoring.

Minor cleanup:
Line 96: The noqa: PLC0415 directive is unnecessary since that check is not enabled in your Ruff configuration.

Optional: Remove unused noqa directive
-        from datamodel_code_generator.reference import Reference  # noqa: PLC0415
+        from datamodel_code_generator.reference import Reference
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 935384a and 8f8a4de.

📒 Files selected for processing (1)
  • src/datamodel_code_generator/model/dataclass.py (1 hunks)
🧰 Additional context used
🪛 GitHub Check: CodeQL
src/datamodel_code_generator/model/dataclass.py

[notice] 96-96: Cyclic import
Import of module datamodel_code_generator.reference begins an import cycle.

🪛 Ruff (0.14.8)
src/datamodel_code_generator/model/dataclass.py

96-96: Unused noqa directive (non-enabled: PLC0415)

Remove unused noqa directive

(RUF100)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: benchmarks
  • GitHub Check: 3.10 on macOS
  • GitHub Check: 3.11 on Windows
  • GitHub Check: 3.10 on Windows
  • GitHub Check: 3.13 on Windows
  • GitHub Check: 3.13 on macOS
  • GitHub Check: 3.12 on Windows
  • GitHub Check: 3.14 on Windows
  • GitHub Check: Analyze (python)

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Dec 19, 2025

CodSpeed Performance Report

Merging #2705 will not alter performance

Comparing fix/core-classes-bugs (1c7df54) with main (42a228e)

Summary

✅ 52 untouched
⏩ 10 skipped1

Footnotes

  1. 10 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@koxudaxi koxudaxi merged commit 1b5d3fb into main Dec 19, 2025
38 checks passed
@koxudaxi koxudaxi deleted the fix/core-classes-bugs branch December 19, 2025 20:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants