syntopica-codeality-py 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/CHANGELOG.md +17 -0
  2. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/PKG-INFO +1 -1
  3. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/pyproject.toml +1 -1
  4. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/assets/codeality-py-ci.yml +2 -0
  5. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/legacy_type_alias.py +9 -6
  6. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/rules/test_one_primary_unit.py +11 -0
  7. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/uv.lock +1 -1
  8. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/.gitignore +0 -0
  9. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/LICENSE +0 -0
  10. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/README.md +0 -0
  11. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/codeality-py.toml +0 -0
  12. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/mypy.ini +0 -0
  13. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/ruff.toml +0 -0
  14. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/__init__.py +0 -0
  15. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/assets/codeality-py.toml +0 -0
  16. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/assets/importlinter.ini +0 -0
  17. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/assets/mypy.ini +0 -0
  18. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/assets/pyproject-sections.toml +0 -0
  19. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/assets/ruff.toml +0 -0
  20. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/__init__.py +0 -0
  21. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/baseline_file.py +0 -0
  22. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/classified_findings.py +0 -0
  23. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/classify_findings.py +0 -0
  24. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/finding_context.py +0 -0
  25. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/fingerprint.py +0 -0
  26. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/fingerprint_context.py +0 -0
  27. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/read_baseline.py +0 -0
  28. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/baseline/write_baseline.py +0 -0
  29. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/cli.py +0 -0
  30. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/__init__.py +0 -0
  31. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/baseline_check_command.py +0 -0
  32. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/baseline_command.py +0 -0
  33. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/baseline_update_command.py +0 -0
  34. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/check_command.py +0 -0
  35. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/checked_project.py +0 -0
  36. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/gate_command.py +0 -0
  37. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/init_command.py +0 -0
  38. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/commands/project_option.py +0 -0
  39. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/__init__.py +0 -0
  40. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/baseline_config.py +0 -0
  41. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/check_schema_version.py +0 -0
  42. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/config_error.py +0 -0
  43. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/default_generated_globs.py +0 -0
  44. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/discover_source_roots.py +0 -0
  45. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/discover_test_roots.py +0 -0
  46. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/limits.py +0 -0
  47. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/load_config.py +0 -0
  48. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/module_role.py +0 -0
  49. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/override.py +0 -0
  50. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/parse_overrides.py +0 -0
  51. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/parse_roles.py +0 -0
  52. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/parse_rule_codes.py +0 -0
  53. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/pyproject_layout_hints.py +0 -0
  54. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/read_config_document.py +0 -0
  55. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/reject_duplicate_role_claims.py +0 -0
  56. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/config/reject_unknown_keys.py +0 -0
  57. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/engine/__init__.py +0 -0
  58. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/engine/check_project.py +0 -0
  59. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/engine/check_result.py +0 -0
  60. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/engine/check_source_file.py +0 -0
  61. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/engine/fingerprint_findings.py +0 -0
  62. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/engine/rule_registry.py +0 -0
  63. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/__init__.py +0 -0
  64. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/build_stage_result.py +0 -0
  65. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/gate_result.py +0 -0
  66. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/gate_stages.py +0 -0
  67. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/run_gate.py +0 -0
  68. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/run_stage.py +0 -0
  69. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/stage.py +0 -0
  70. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/stage_kind.py +0 -0
  71. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/stage_result.py +0 -0
  72. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/gate/stage_status.py +0 -0
  73. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/__init__.py +0 -0
  74. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/add_missing_rules.py +0 -0
  75. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/apply_init.py +0 -0
  76. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/current_branch.py +0 -0
  77. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/first_party_packages.py +0 -0
  78. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/has_ruff_table.py +0 -0
  79. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/managed_asset_files.py +0 -0
  80. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/managed_file.py +0 -0
  81. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/merge_pyproject_sections.py +0 -0
  82. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/merge_quality_group.py +0 -0
  83. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/merge_ruff_config.py +0 -0
  84. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/plan_asset_file.py +0 -0
  85. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/plan_disposition.py +0 -0
  86. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/plan_init.py +0 -0
  87. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/plan_pyproject.py +0 -0
  88. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/plan_ruff.py +0 -0
  89. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/plan_shadowed_ruff.py +0 -0
  90. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/python_floor_minor.py +0 -0
  91. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/read_asset.py +0 -0
  92. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/read_requires_python.py +0 -0
  93. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/render_asset.py +0 -0
  94. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/render_nested_workflow.py +0 -0
  95. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/repository_root.py +0 -0
  96. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/init/workflow_target.py +0 -0
  97. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/model/__init__.py +0 -0
  98. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/model/finding.py +0 -0
  99. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/model/location.py +0 -0
  100. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/model/rule_code.py +0 -0
  101. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/model/severity.py +0 -0
  102. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/parsing/__init__.py +0 -0
  103. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/parsing/infrastructure_error.py +0 -0
  104. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/parsing/parse_source_file.py +0 -0
  105. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/parsing/read_source_text.py +0 -0
  106. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/parsing/source_file.py +0 -0
  107. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/parsing/syntax_error_finding.py +0 -0
  108. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/__init__.py +0 -0
  109. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/exit_code.py +0 -0
  110. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/finding_document.py +0 -0
  111. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/findings_summary.py +0 -0
  112. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/render_gate_report.py +0 -0
  113. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/render_json_report.py +0 -0
  114. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/render_text_report.py +0 -0
  115. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/report/stage_document.py +0 -0
  116. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/roles/__init__.py +0 -0
  117. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/roles/assign_module_role.py +0 -0
  118. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/roles/compile_glob.py +0 -0
  119. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/roles/matches_any_pattern.py +0 -0
  120. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/roles/matches_glob.py +0 -0
  121. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/roles/test_file_patterns.py +0 -0
  122. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/__init__.py +0 -0
  123. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/barrel_only_init.py +0 -0
  124. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/count_code_lines.py +0 -0
  125. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/data_unit_findings.py +0 -0
  126. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/docstring_line_spans.py +0 -0
  127. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/file_matches_unit.py +0 -0
  128. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/grab_bag_names.py +0 -0
  129. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/is_allowed_barrel_statement.py +0 -0
  130. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/is_column_list.py +0 -0
  131. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/is_docstring_statement.py +0 -0
  132. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/is_sql_literal.py +0 -0
  133. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/is_static_dunder_assignment.py +0 -0
  134. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/is_type_checking_block.py +0 -0
  135. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/joined_string_text.py +0 -0
  136. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/looks_like_sql.py +0 -0
  137. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/max_file_lines.py +0 -0
  138. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/no_grab_bag_names.py +0 -0
  139. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/no_inline_sql.py +0 -0
  140. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/one_primary_unit.py +0 -0
  141. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/ordinary_unit_findings.py +0 -0
  142. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/sql_subject.py +0 -0
  143. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/rules/unit_finding.py +0 -0
  144. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/__init__.py +0 -0
  145. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/apply_suppressions.py +0 -0
  146. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/build_suppression.py +0 -0
  147. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/covering_suppression.py +0 -0
  148. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/is_overridden.py +0 -0
  149. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/parse_suppression_line.py +0 -0
  150. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/parse_suppressions.py +0 -0
  151. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/suppression/suppression.py +0 -0
  152. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/traversal/__init__.py +0 -0
  153. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/traversal/collect_source_files.py +0 -0
  154. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/traversal/default_excludes.py +0 -0
  155. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/traversal/gitignore_matcher.py +0 -0
  156. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/traversal/walk_root.py +0 -0
  157. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/__init__.py +0 -0
  158. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/coalesce_overloads.py +0 -0
  159. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/coalesce_singledispatch.py +0 -0
  160. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/collect_declarations.py +0 -0
  161. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/count_primary_declarations.py +0 -0
  162. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/declaration.py +0 -0
  163. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/declaration_for.py +0 -0
  164. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/declaration_kind.py +0 -0
  165. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/decorator_name.py +0 -0
  166. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/decorator_names.py +0 -0
  167. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/is_main_guard.py +0 -0
  168. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/is_private_local_handler.py +0 -0
  169. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/literal_string_names.py +0 -0
  170. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/merge_stray_letters.py +0 -0
  171. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/named_declaration.py +0 -0
  172. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/overload_family_length.py +0 -0
  173. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/resolve_exported_names.py +0 -0
  174. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/to_snake_case.py +0 -0
  175. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/src/codeality_py/units/top_level_statements.py +0 -0
  176. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/baseline/test_classify_findings.py +0 -0
  177. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/commands/test_baseline_command.py +0 -0
  178. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/commands/test_check_command.py +0 -0
  179. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/config/test_load_config.py +0 -0
  180. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/config/test_pyproject_layout_hints.py +0 -0
  181. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/conftest.py +0 -0
  182. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/gate/test_gate_stages.py +0 -0
  183. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/gate/test_run_gate.py +0 -0
  184. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/init/test_merge_ruff_config.py +0 -0
  185. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/init/test_plan_init.py +0 -0
  186. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/init/test_render_asset.py +0 -0
  187. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/model/test_finding.py +0 -0
  188. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/model/test_rule_code.py +0 -0
  189. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/parsing/test_parse_source_file.py +0 -0
  190. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/roles/test_assign_module_role.py +0 -0
  191. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/roles/test_matches_glob.py +0 -0
  192. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/rules/test_barrel_only_init.py +0 -0
  193. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/rules/test_file_matches_unit.py +0 -0
  194. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/rules/test_max_file_lines.py +0 -0
  195. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/rules/test_no_grab_bag_names.py +0 -0
  196. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/rules/test_no_inline_sql.py +0 -0
  197. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/test_cli_version.py +0 -0
  198. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/traversal/test_collect_source_files.py +0 -0
  199. {syntopica_codeality_py-0.2.0 → syntopica_codeality_py-0.2.2}/tests/units/test_to_snake_case.py +0 -0
@@ -4,6 +4,23 @@ All notable changes to `syntopica-codeality-py` are documented here. The format
4
4
  follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
5
5
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## 0.2.2
8
+
9
+ ### Changed
10
+
11
+ - The CI workflow `init --ci` writes now checks out without persisting the
12
+ GitHub token in the runner's git config. Nothing in that workflow pushes, so
13
+ the credential only widened what a compromised step could reach.
14
+
15
+ ## 0.2.1
16
+
17
+ ### Fixed
18
+
19
+ - A functional `TypedDict` or `NamedTuple` assigned to a name is the module's
20
+ unit, like the `NewType` beside it. The class syntax is not always available:
21
+ a field named `in`, or any other Python keyword, can only be declared this
22
+ way, and such a module was reported as having no declaration at all.
23
+
7
24
  ## 0.2.0
8
25
 
9
26
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: syntopica-codeality-py
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Structural linter and config scaffolder for Python: atomic files, placement, size caps, no inline SQL
5
5
  Project-URL: Homepage, https://github.com/syntopica/codeality
6
6
  Project-URL: Issues, https://github.com/syntopica/codeality/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "syntopica-codeality-py"
7
- version = "0.2.0"
7
+ version = "0.2.2"
8
8
  description = "Structural linter and config scaffolder for Python: atomic files, placement, size caps, no inline SQL"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -17,6 +17,8 @@ jobs:
17
17
  python-version: ['3.11', '3.13']
18
18
  steps:
19
19
  - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
20
+ with:
21
+ persist-credentials: false
20
22
 
21
23
  - name: Install uv
22
24
  uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
@@ -9,10 +9,13 @@ from codeality_py.units.named_declaration import named_declaration
9
9
 
10
10
 
11
11
  def legacy_type_alias(statement: ast.stmt, location: Location) -> Declaration | None:
12
- """Return a declaration for ``X: TypeAlias`` or ``X = NewType(...)``.
12
+ """Return a declaration for ``X: TypeAlias`` or a functional type call.
13
13
 
14
- A plain ``Alias = list[str]`` is deliberately not recognised: inferring
15
- intent from an unannotated assignment produces false positives.
14
+ The functional forms - ``NewType``, ``TypedDict`` and ``NamedTuple`` - are
15
+ the same declaration the class syntax makes, written the only way that
16
+ works when a field name is a Python keyword. A plain ``Alias = list[str]``
17
+ is deliberately not recognised: inferring intent from an unannotated
18
+ assignment produces false positives.
16
19
  """
17
20
  if isinstance(statement, ast.AnnAssign) and isinstance(statement.target, ast.Name):
18
21
  annotation = statement.annotation
@@ -23,11 +26,11 @@ def legacy_type_alias(statement: ast.stmt, location: Location) -> Declaration |
23
26
  return None
24
27
  target = statement.targets[0]
25
28
  value = statement.value
26
- is_new_type = (
29
+ is_type_call = (
27
30
  isinstance(value, ast.Call)
28
31
  and isinstance(value.func, ast.Name)
29
- and value.func.id == "NewType"
32
+ and value.func.id in ("NewType", "TypedDict", "NamedTuple")
30
33
  )
31
- if isinstance(target, ast.Name) and is_new_type:
34
+ if isinstance(target, ast.Name) and is_type_call:
32
35
  return named_declaration(target.id, DeclarationKind.TYPE_ALIAS, location)
33
36
  return None
@@ -77,6 +77,17 @@ def test_new_type_counts(make_source, config) -> None:
77
77
  assert not _clean(make_source, config, body)
78
78
 
79
79
 
80
+ def test_a_functional_typed_dict_is_the_module_unit(make_source, config) -> None:
81
+ # The only way to declare a field whose name is a Python keyword.
82
+ body = "from typing import TypedDict\n\nNode = TypedDict('Node', {'id': str, 'in': int})\n"
83
+ assert _clean(make_source, config, body)
84
+
85
+
86
+ def test_a_functional_named_tuple_is_the_module_unit(make_source, config) -> None:
87
+ body = "from typing import NamedTuple\n\nPoint = NamedTuple('Point', [('x', int)])\n"
88
+ assert _clean(make_source, config, body)
89
+
90
+
80
91
  def test_a_plain_assignment_alias_does_not_count(make_source, config) -> None:
81
92
  body = "Rows = list[str]\n\n\ndef load() -> Rows:\n return []\n"
82
93
  assert _clean(make_source, config, body)
@@ -937,7 +937,7 @@ wheels = [
937
937
 
938
938
  [[package]]
939
939
  name = "syntopica-codeality-py"
940
- version = "0.2.0"
940
+ version = "0.2.2"
941
941
  source = { editable = "." }
942
942
  dependencies = [
943
943
  { name = "click" },