Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: codegen-sh/codegen
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.6.1
Choose a base ref
...
head repository: codegen-sh/codegen
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.6.2
Choose a head ref
  • 9 commits
  • 247 files changed
  • 7 contributors

Commits on Feb 10, 2025

  1. ops: disable auto-release (#400)

    trigger isn't working b/c github doesn't let you chain from bot to bot
    to prevent loops
    
    need to merge the workflows
    
    https://linear.app/codegen-sh/issue/CG-10755/merge-releaseyml-with-auto-releaseyml
    christinewangcw authored Feb 10, 2025

    Verified

    This commit was signed with the committer’s verified signature.
    flavorjones Mike Dalessio
    Copy the full SHA
    ea5327f View commit details
  2. fix(deps): update dependency codegen to v0.6.1 (#402)

    This PR contains the following updates:
    
    | Package | Change | Age | Adoption | Passing | Confidence |
    |---|---|---|---|---|---|
    | [codegen](https://redirect.github.com/codegen-sh/codegen-sdk)
    ([changelog](https://docs.codegen.com/changelog/changelog)) | `==0.5.30`
    -> `==0.6.1` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/codegen/0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/codegen/0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/codegen/0.5.30/0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/codegen/0.5.30/0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    
    ---
    
    ### Release Notes
    
    <details>
    <summary>codegen-sh/codegen-sdk (codegen)</summary>
    
    ###
    [`v0.6.1`](https://redirect.github.com/codegen-sh/codegen-sdk/releases/tag/v0.6.1)
    
    [Compare
    Source](https://redirect.github.com/codegen-sh/codegen-sdk/compare/v0.5.30...v0.6.1)
    
    <!-- Release notes generated using configuration in .github/release.yml
    at develop -->
    
    #### What's Changed
    
    ##### Other Changes
    
    - CG-10731: Add ChainedAttribute.attribute_chain by
    [@&#8203;tawsifkamal](https://redirect.github.com/tawsifkamal) in
    [https://github.com/codegen-sh/codegen-sdk/pull/383](https://redirect.github.com/codegen-sh/codegen-sdk/pull/383)
    - fix: CG-9440 clean repo - clears from the default branch by
    [@&#8203;christinewangcw](https://redirect.github.com/christinewangcw)
    in
    [https://github.com/codegen-sh/codegen-sdk/pull/398](https://redirect.github.com/codegen-sh/codegen-sdk/pull/398)
    - chore(testing): set base dir in op creation by
    [@&#8203;christinewangcw](https://redirect.github.com/christinewangcw)
    in
    [https://github.com/codegen-sh/codegen-sdk/pull/399](https://redirect.github.com/codegen-sh/codegen-sdk/pull/399)
    - CG-10470: Add `config` CLI commands by
    [@&#8203;caroljung-cg](https://redirect.github.com/caroljung-cg) in
    [https://github.com/codegen-sh/codegen-sdk/pull/391](https://redirect.github.com/codegen-sh/codegen-sdk/pull/391)
    - Remove LFS from `codegen-sdk` (+ disable `disallowed-words` check) by
    [@&#8203;EdwardJXLi](https://redirect.github.com/EdwardJXLi) in
    [https://github.com/codegen-sh/codegen-sdk/pull/397](https://redirect.github.com/codegen-sh/codegen-sdk/pull/397)
    - docs: remove Apple siliicon by
    [@&#8203;jayhack](https://redirect.github.com/jayhack) in
    [https://github.com/codegen-sh/codegen-sdk/pull/368](https://redirect.github.com/codegen-sh/codegen-sdk/pull/368)
    
    **Full Changelog**:
    v0.6.0...v0.6.1
    
    </details>
    
    ---
    
    ### Configuration
    
    📅 **Schedule**: Branch creation - At any time (no schedule defined),
    Automerge - At any time (no schedule defined).
    
    🚦 **Automerge**: Enabled.
    
    ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
    rebase/retry checkbox.
    
    🔕 **Ignore**: Close this PR and you won't be reminded about this update
    again.
    
    ---
    
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
    this box
    
    ---
    
    This PR was generated by [Mend Renovate](https://mend.io/renovate/).
    View the [repository job
    log](https://developer.mend.io/github/codegen-sh/codegen-sdk).
    
    <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored Feb 10, 2025

    Verified

    This commit was signed with the committer’s verified signature.
    flavorjones Mike Dalessio
    Copy the full SHA
    e4229ba View commit details
  3. build: [CG-10755] combine release.yml + auto-release.yml (#403)

    - **renmae steps**
    - **CG-10755 cmobine release yml with auto-release.yml**
    - **CG-10755 cmobine release yml with auto-release.yml**
    christinewangcw authored Feb 10, 2025
    Copy the full SHA
    2ee54d9 View commit details

Commits on Feb 11, 2025

  1. feat(dependencies): unified dependencies… (#362)

    Merge dependency-related methods to provide a unified interface:
    - Make dependencies a proxy property with optional depth parameter
    - Default to all dependencies (depth=None)
    - Support direct dependencies via depth=1
    - Maintain backward compatibility
    - Update move_symbol_to_file to use direct dependencies
    
    Additional fixes:
    - Replace complex ternary with clear condition in _get_all_dependencies
    for better readability
    - Fix type annotations in Symbol class to remove invalid use of ...
    - All changes maintain backward compatibility
    
    Link to Devin run:
    https://app.devin.ai/sessions/907c0762112047ffb4ff05f529f7195f
    Requested by: ed@codegen.com
    
    ---------
    
    Co-authored-by: kopekC <28070492+kopekC@users.noreply.github.com>
    kopekC and kopekC authored Feb 11, 2025
    Copy the full SHA
    1a5d9ed View commit details
  2. Rename CodebaseGraph to CodebaseContext (#405)

    `CodebaseGraph` is misleading and has been a deprecated term since the
    Codebase Initialization Refactor.
    EdwardJXLi authored Feb 11, 2025
    Copy the full SHA
    1a085d2 View commit details
  3. chore(deps): update pre-commit hook astral-sh/uv-pre-commit to v0.5.30 (

    #406)
    
    This PR contains the following updates:
    
    | Package | Type | Update | Change |
    |---|---|---|---|
    |
    [astral-sh/uv-pre-commit](https://redirect.github.com/astral-sh/uv-pre-commit)
    | repository | patch | `0.5.29` -> `0.5.30` |
    
    Note: The `pre-commit` manager in Renovate is not supported by the
    `pre-commit` maintainers or community. Please do not report any problems
    there, instead [create a Discussion in the Renovate
    repository](https://redirect.github.com/renovatebot/renovate/discussions/new)
    if you have any questions.
    
    ---
    
    ### Release Notes
    
    <details>
    <summary>astral-sh/uv-pre-commit (astral-sh/uv-pre-commit)</summary>
    
    ###
    [`v0.5.30`](https://redirect.github.com/astral-sh/uv-pre-commit/releases/tag/0.5.30)
    
    [Compare
    Source](https://redirect.github.com/astral-sh/uv-pre-commit/compare/0.5.29...0.5.30)
    
    See: https://github.com/astral-sh/uv/releases/tag/0.5.30
    
    </details>
    
    ---
    
    ### Configuration
    
    📅 **Schedule**: Branch creation - At any time (no schedule defined),
    Automerge - At any time (no schedule defined).
    
    🚦 **Automerge**: Enabled.
    
    ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
    rebase/retry checkbox.
    
    🔕 **Ignore**: Close this PR and you won't be reminded about this update
    again.
    
    ---
    
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
    this box
    
    ---
    
    This PR was generated by [Mend Renovate](https://mend.io/renovate/).
    View the [repository job
    log](https://developer.mend.io/github/codegen-sh/codegen-sdk).
    
    <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored Feb 11, 2025
    Copy the full SHA
    54d1809 View commit details
  4. refactor: Split out file IO (#404)

    # Motivation
    - Helpful for LSP support
    
    # Content
    - Move all file I/O into it's own class
    
    ---------
    
    Co-authored-by: eacodegen <171607756+eacodegen@users.noreply.github.com>
    bagel897 and eacodegen authored Feb 11, 2025
    Copy the full SHA
    acf2ea4 View commit details
  5. build: convert release to reusable workflow (#407)

    - **storing some progress**
    - **chore: convert release to a reusable workflow**
    christinewangcw authored Feb 11, 2025
    Copy the full SHA
    c3be238 View commit details
  6. fix: add content write permission (#408)

    christinewangcw authored Feb 11, 2025
    Copy the full SHA
    8c73d08 View commit details
Showing with 1,990 additions and 1,462 deletions.
  1. +15 −0 .github/actions/release-pypi/action.yml
  2. +23 −0 .github/actions/release-slack-bot/action.yml
  3. +1 −1 .github/actions/{run_ats → run-ats}/action.yml
  4. 0 .github/actions/{run_ats → run-ats}/ats.sh
  5. +13 −6 .github/workflows/auto-release.yml
  6. +2 −2 .github/workflows/cache-warm-up.yml
  7. +1 −1 .github/workflows/mypy.yml
  8. +1 −1 .github/workflows/pre-commit.yml
  9. +24 −23 .github/workflows/release.yml
  10. +6 −6 .github/workflows/unit-tests.yml
  11. +1 −1 .pre-commit-config.yaml
  12. +1 −1 codegen-examples/pyproject.toml
  13. +84 −8 docs/building-with-codegen/dependencies-and-usages.mdx
  14. +1 −6 package.json
  15. +2 −2 src/codegen/runner/diff/get_raw_diff.py
  16. +4 −4 src/codegen/runner/sandbox/executor.py
  17. +1 −1 src/codegen/runner/sandbox/middlewares.py
  18. +1 −1 src/codegen/runner/sandbox/runner.py
  19. +1 −2 src/codegen/sdk/code_generation/doc_utils/generate_docs_json.py
  20. +5 −5 src/codegen/sdk/codebase/codebase_analysis.py
  21. +15 −20 src/codegen/sdk/codebase/{codebase_graph.py → codebase_context.py}
  22. +4 −4 src/codegen/sdk/codebase/config_parser.py
  23. +3 −3 src/codegen/sdk/codebase/factory/get_session.py
  24. +51 −0 src/codegen/sdk/codebase/io/file_io.py
  25. +50 −0 src/codegen/sdk/codebase/io/io.py
  26. +3 −3 src/codegen/sdk/codebase/node_classes/py_node_classes.py
  27. +1 −1 src/codegen/sdk/codebase/range_index.py
  28. +3 −5 src/codegen/sdk/codebase/transactions.py
  29. +8 −8 src/codegen/sdk/codebase/validation.py
  30. +12 −12 src/codegen/sdk/core/assignment.py
  31. +6 −6 src/codegen/sdk/core/autocommit/decorators.py
  32. +9 −9 src/codegen/sdk/core/autocommit/manager.py
  33. +3 −3 src/codegen/sdk/core/class_definition.py
  34. +59 −59 src/codegen/sdk/core/codebase.py
  35. +5 −5 src/codegen/sdk/core/detached_symbols/argument.py
  36. +3 −3 src/codegen/sdk/core/detached_symbols/code_block.py
  37. +1 −1 src/codegen/sdk/core/detached_symbols/decorator.py
  38. +12 −12 src/codegen/sdk/core/detached_symbols/function_call.py
  39. +1 −1 src/codegen/sdk/core/detached_symbols/parameter.py
  40. +4 −4 src/codegen/sdk/core/export.py
  41. +3 −3 src/codegen/sdk/core/expressions/await_expression.py
  42. +3 −3 src/codegen/sdk/core/expressions/binary_expression.py
  43. +1 −1 src/codegen/sdk/core/expressions/builtin.py
  44. +7 −7 src/codegen/sdk/core/expressions/chained_attribute.py
  45. +3 −3 src/codegen/sdk/core/expressions/comparison_expression.py
  46. +3 −3 src/codegen/sdk/core/expressions/generic_type.py
  47. +3 −3 src/codegen/sdk/core/expressions/multi_expression.py
  48. +3 −3 src/codegen/sdk/core/expressions/name.py
  49. +3 −3 src/codegen/sdk/core/expressions/named_type.py
  50. +3 −3 src/codegen/sdk/core/expressions/parenthesized_expression.py
  51. +4 −4 src/codegen/sdk/core/expressions/string.py
  52. +2 −2 src/codegen/sdk/core/expressions/subscript_expression.py
  53. +4 −4 src/codegen/sdk/core/expressions/tuple_type.py
  54. +3 −3 src/codegen/sdk/core/expressions/unary_expression.py
  55. +4 −4 src/codegen/sdk/core/expressions/union_type.py
  56. +2 −2 src/codegen/sdk/core/expressions/unpack.py
  57. +1 −1 src/codegen/sdk/core/expressions/value.py
  58. +4 −4 src/codegen/sdk/core/external/dependency_manager.py
  59. +6 −6 src/codegen/sdk/core/external/language_engine.py
  60. +8 −8 src/codegen/sdk/core/external_module.py
  61. +57 −78 src/codegen/sdk/core/file.py
  62. +3 −3 src/codegen/sdk/core/function.py
  63. +16 −16 src/codegen/sdk/core/import_resolution.py
  64. +1 −1 src/codegen/sdk/core/interfaces/chainable.py
  65. +21 −21 src/codegen/sdk/core/interfaces/editable.py
  66. +2 −2 src/codegen/sdk/core/interfaces/exportable.py
  67. +1 −1 src/codegen/sdk/core/interfaces/has_block.py
  68. +32 −22 src/codegen/sdk/core/interfaces/importable.py
  69. +2 −2 src/codegen/sdk/core/interfaces/inherits.py
  70. +2 −2 src/codegen/sdk/core/interfaces/parseable.py
  71. +1 −1 src/codegen/sdk/core/interfaces/usable.py
  72. +34 −34 src/codegen/sdk/core/parser.py
  73. +4 −4 src/codegen/sdk/core/statements/assignment_statement.py
  74. +3 −3 src/codegen/sdk/core/statements/attribute.py
  75. +3 −3 src/codegen/sdk/core/statements/block_statement.py
  76. +3 −3 src/codegen/sdk/core/statements/comment.py
  77. +10 −10 src/codegen/sdk/core/statements/export_statement.py
  78. +3 −3 src/codegen/sdk/core/statements/expression_statement.py
  79. +3 −3 src/codegen/sdk/core/statements/import_statement.py
  80. +3 −3 src/codegen/sdk/core/statements/raise_statement.py
  81. +3 −3 src/codegen/sdk/core/statements/return_statement.py
  82. +5 −5 src/codegen/sdk/core/statements/statement.py
  83. +4 −4 src/codegen/sdk/core/statements/symbol_statement.py
  84. +3 −3 src/codegen/sdk/core/statements/while_statement.py
  85. +10 −10 src/codegen/sdk/core/symbol.py
  86. +3 −3 src/codegen/sdk/core/symbol_group.py
  87. +3 −3 src/codegen/sdk/core/symbol_groups/collection.py
  88. +3 −3 src/codegen/sdk/core/symbol_groups/comment_group.py
  89. +8 −8 src/codegen/sdk/core/symbol_groups/dict.py
  90. +3 −3 src/codegen/sdk/core/symbol_groups/list.py
  91. +3 −3 src/codegen/sdk/core/symbol_groups/multi_line_collection.py
  92. +5 −5 src/codegen/sdk/core/symbol_groups/parents.py
  93. +3 −3 src/codegen/sdk/core/symbol_groups/tuple.py
  94. +3 −3 src/codegen/sdk/core/symbol_groups/type_parameters.py
  95. +3 −3 src/codegen/sdk/core/type_alias.py
  96. +2 −2 src/codegen/sdk/extensions/autocommit.pyi
  97. +7 −7 src/codegen/sdk/extensions/autocommit.pyx
  98. +0 −12 src/codegen/sdk/extensions/io.pyx
  99. +2 −2 src/codegen/sdk/extensions/resolution.pyi
  100. +5 −5 src/codegen/sdk/extensions/resolution.pyx
  101. +8 −8 src/codegen/sdk/python/assignment.py
  102. +6 −6 src/codegen/sdk/python/class_definition.py
  103. +2 −2 src/codegen/sdk/python/detached_symbols/code_block.py
  104. +1 −1 src/codegen/sdk/python/detached_symbols/decorator.py
  105. +2 −2 src/codegen/sdk/python/expressions/chained_attribute.py
  106. +2 −2 src/codegen/sdk/python/expressions/conditional_expression.py
  107. +2 −2 src/codegen/sdk/python/expressions/generic_type.py
  108. +3 −3 src/codegen/sdk/python/expressions/string.py
  109. +4 −4 src/codegen/sdk/python/file.py
  110. +6 −6 src/codegen/sdk/python/function.py
  111. +19 −19 src/codegen/sdk/python/import_resolution.py
  112. +11 −11 src/codegen/sdk/python/statements/assignment_statement.py
  113. +3 −3 src/codegen/sdk/python/statements/catch_statement.py
  114. +3 −3 src/codegen/sdk/python/statements/for_loop_statement.py
  115. +4 −4 src/codegen/sdk/python/statements/if_block_statement.py
  116. +7 −7 src/codegen/sdk/python/statements/import_statement.py
  117. +3 −3 src/codegen/sdk/python/statements/match_case.py
  118. +4 −4 src/codegen/sdk/python/statements/match_statement.py
  119. +5 −5 src/codegen/sdk/python/statements/try_catch_statement.py
  120. +4 −4 src/codegen/sdk/python/statements/while_statement.py
  121. +4 −4 src/codegen/sdk/python/statements/with_statement.py
  122. +3 −3 src/codegen/sdk/python/symbol.py
  123. +3 −3 src/codegen/sdk/python/symbol_groups/comment_group.py
  124. +8 −8 src/codegen/sdk/typescript/assignment.py
  125. +7 −7 src/codegen/sdk/typescript/class_definition.py
  126. +9 −9 src/codegen/sdk/typescript/config_parser.py
  127. +2 −2 src/codegen/sdk/typescript/detached_symbols/code_block.py
  128. +1 −1 src/codegen/sdk/typescript/detached_symbols/decorator.py
  129. +4 −4 src/codegen/sdk/typescript/detached_symbols/jsx/element.py
  130. +1 −1 src/codegen/sdk/typescript/detached_symbols/jsx/expression.py
  131. +3 −3 src/codegen/sdk/typescript/detached_symbols/jsx/prop.py
  132. +3 −3 src/codegen/sdk/typescript/enum_definition.py
  133. +38 −30 src/codegen/sdk/typescript/export.py
  134. +2 −2 src/codegen/sdk/typescript/expressions/chained_attribute.py
  135. +3 −3 src/codegen/sdk/typescript/expressions/conditional_type.py
  136. +3 −3 src/codegen/sdk/typescript/expressions/expression_type.py
  137. +4 −4 src/codegen/sdk/typescript/expressions/function_type.py
  138. +1 −1 src/codegen/sdk/typescript/expressions/generic_type.py
  139. +3 −3 src/codegen/sdk/typescript/expressions/lookup_type.py
  140. +5 −5 src/codegen/sdk/typescript/expressions/object_type.py
  141. +3 −3 src/codegen/sdk/typescript/expressions/query_type.py
  142. +3 −3 src/codegen/sdk/typescript/expressions/readonly_type.py
  143. +3 −3 src/codegen/sdk/typescript/expressions/string.py
  144. +2 −2 src/codegen/sdk/typescript/expressions/ternary_expression.py
  145. +6 −6 src/codegen/sdk/typescript/file.py
  146. +8 −8 src/codegen/sdk/typescript/function.py
  147. +22 −22 src/codegen/sdk/typescript/import_resolution.py
  148. +6 −6 src/codegen/sdk/typescript/interface.py
  149. +3 −3 src/codegen/sdk/typescript/namespace.py
  150. +17 −17 src/codegen/sdk/typescript/statements/assignment_statement.py
  151. +3 −3 src/codegen/sdk/typescript/statements/attribute.py
  152. +3 −3 src/codegen/sdk/typescript/statements/catch_statement.py
  153. +3 −3 src/codegen/sdk/typescript/statements/for_loop_statement.py
  154. +5 −5 src/codegen/sdk/typescript/statements/if_block_statement.py
  155. +7 −7 src/codegen/sdk/typescript/statements/import_statement.py
  156. +4 −4 src/codegen/sdk/typescript/statements/labeled_statement.py
  157. +3 −3 src/codegen/sdk/typescript/statements/switch_case.py
  158. +4 −4 src/codegen/sdk/typescript/statements/switch_statement.py
  159. +5 −5 src/codegen/sdk/typescript/statements/try_catch_statement.py
  160. +3 −3 src/codegen/sdk/typescript/statements/while_statement.py
  161. +3 −3 src/codegen/sdk/typescript/symbol.py
  162. +4 −4 src/codegen/sdk/typescript/symbol_groups/comment_group.py
  163. +7 −7 src/codegen/sdk/typescript/symbol_groups/dict.py
  164. +10 −10 src/codegen/sdk/typescript/ts_config.py
  165. +2 −2 tests/integration/codemod/test_codemods.py
  166. +1 −1 tests/integration/codemod/test_diffs.py
  167. +1 −1 tests/integration/codemod/test_verified_codemods.py
  168. +5 −5 tests/unit/codegen/sdk/codebase/codebase_graph/test_codebase_graph.py
  169. +1 −1 tests/unit/codegen/sdk/codebase/codebase_graph/test_validation.py
  170. +4 −4 tests/unit/codegen/sdk/codebase/transaction_manager/test_transaction_mangager_checks.py
  171. +169 −0 tests/unit/codegen/sdk/core/interfaces/test_importable_dependencies.py
  172. +63 −0 tests/unit/codegen/sdk/io/test_file_io.py
  173. +4 −4 tests/unit/codegen/sdk/python/autocommit/test_autocommit.py
  174. +10 −10 tests/unit/codegen/sdk/python/class_definition/test_class_dependencies.py
  175. +1 −1 tests/unit/codegen/sdk/python/codebase/test_codebase_create_file.py
  176. +1 −1 tests/unit/codegen/sdk/python/codebase/test_codebase_git.py
  177. +8 −8 tests/unit/codegen/sdk/python/codebase/test_codebase_reset.py
  178. +5 −5 tests/unit/codegen/sdk/python/detached_symbols/argument/test_argument_remove.py
  179. +1 −1 tests/unit/codegen/sdk/python/detached_symbols/code_block/test_code_block.py
  180. +6 −6 tests/unit/codegen/sdk/python/detached_symbols/decorator/test_decorator_call.py
  181. +1 −1 tests/unit/codegen/sdk/python/detached_symbols/decorator/test_decorator_remove.py
  182. +5 −5 tests/unit/codegen/sdk/python/detached_symbols/parameter/test_parameter_remove.py
  183. +2 −2 tests/unit/codegen/sdk/python/detached_symbols/parameter/test_parameter_rename.py
  184. +2 −2 tests/unit/codegen/sdk/python/detached_symbols/parameter/test_parameter_set_type_annotation.py
  185. +2 −2 tests/unit/codegen/sdk/python/file/test_file_get_import_string.py
  186. +5 −5 tests/unit/codegen/sdk/python/file/test_file_properties.py
  187. +7 −7 tests/unit/codegen/sdk/python/file/test_file_remove.py
  188. +24 −24 tests/unit/codegen/sdk/python/file/test_file_reparse.py
  189. +1 −1 tests/unit/codegen/sdk/python/function/test_function_remove.py
  190. +4 −4 tests/unit/codegen/sdk/python/function/test_function_set_docstring.py
  191. +2 −2 tests/unit/codegen/sdk/python/global_var/test_global_var_remove.py
  192. +1 −1 tests/unit/codegen/sdk/python/import_resolution/test_import_editable.py
  193. +14 −14 tests/unit/codegen/sdk/python/import_resolution/test_import_remove.py
  194. +2 −2 tests/unit/codegen/sdk/python/import_resolution/test_import_rename.py
  195. +3 −3 tests/unit/codegen/sdk/python/import_resolution/test_import_set_import_module.py
  196. +2 −2 tests/unit/codegen/sdk/python/import_resolution/test_import_set_import_symbol_alias.py
  197. +1 −1 tests/unit/codegen/sdk/python/statements/attribute/test_attribute_properties.py
  198. +16 −16 tests/unit/codegen/sdk/typescript/class_definition/test_class_definition_is_jsx.py
  199. +2 −2 tests/unit/codegen/sdk/typescript/class_definition/test_class_dependencies.py
  200. +2 −2 tests/unit/codegen/sdk/typescript/class_definition/test_class_is_exported.py
  201. +32 −32 tests/unit/codegen/sdk/typescript/comment_docstring/test_comment.py
  202. +20 −20 tests/unit/codegen/sdk/typescript/comment_docstring/test_comment_edit.py
  203. +32 −32 tests/unit/codegen/sdk/typescript/comment_docstring/test_comment_insert_add.py
  204. +24 −24 tests/unit/codegen/sdk/typescript/comment_docstring/test_docstring.py
  205. +14 −14 tests/unit/codegen/sdk/typescript/comment_docstring/test_docstring_edit.py
  206. +20 −20 tests/unit/codegen/sdk/typescript/comment_docstring/test_docstring_insert_add.py
  207. +4 −4 tests/unit/codegen/sdk/typescript/comment_docstring/test_inline_comment.py
  208. +6 −6 tests/unit/codegen/sdk/typescript/comment_docstring/test_inline_comment_edit.py
  209. +10 −10 tests/unit/codegen/sdk/typescript/comment_docstring/test_inline_comment_insert_add.py
  210. +2 −2 tests/unit/codegen/sdk/typescript/detached_symbols/decorator/test_decorator_call.py
  211. +4 −4 .../unit/codegen/sdk/typescript/detached_symbols/function_call/test_function_call_extended_source.py
  212. +3 −3 ...degen/sdk/typescript/detached_symbols/function_call/test_function_call_get_function_definition.py
  213. +14 −14 tests/unit/codegen/sdk/typescript/detached_symbols/function_call/test_function_call_is_awaited.py
  214. +4 −4 tests/unit/codegen/sdk/typescript/detached_symbols/function_call/test_function_call_predecessor.py
  215. +3 −3 tests/unit/codegen/sdk/typescript/file/test_file_add_symbol_from_source.py
  216. +4 −4 tests/unit/codegen/sdk/typescript/file/test_file_get_global_var.py
  217. +2 −2 tests/unit/codegen/sdk/typescript/file/test_file_get_import_string.py
  218. +2 −2 tests/unit/codegen/sdk/typescript/file/test_file_global_vars.py
  219. +4 −4 tests/unit/codegen/sdk/typescript/file/test_file_graph.py
  220. +18 −18 tests/unit/codegen/sdk/typescript/file/test_file_imports.py
  221. +16 −16 tests/unit/codegen/sdk/typescript/file/test_file_symbols.py
  222. +3 −3 tests/unit/codegen/sdk/typescript/file/test_ts_config_properties.py
  223. +14 −14 tests/unit/codegen/sdk/typescript/function/test_function_dependencies.py
  224. +2 −2 tests/unit/codegen/sdk/typescript/function/test_function_function_declaration_docstring.py
  225. +6 −6 tests/unit/codegen/sdk/typescript/function/test_function_is_exported.py
  226. +4 −4 tests/unit/codegen/sdk/typescript/function/test_function_parameters.py
  227. +4 −4 tests/unit/codegen/sdk/typescript/function/test_function_set_docstring.py
  228. +2 −2 tests/unit/codegen/sdk/typescript/function/test_function_usages.py
  229. +8 −8 tests/unit/codegen/sdk/typescript/global_var/test_global_var_dependencies.py
  230. +6 −6 tests/unit/codegen/sdk/typescript/global_var/test_global_var_is_exported.py
  231. +6 −6 tests/unit/codegen/sdk/typescript/global_var/test_global_var_parsing.py
  232. +2 −2 tests/unit/codegen/sdk/typescript/global_var/test_global_var_special.py
  233. +2 −2 tests/unit/codegen/sdk/typescript/import_resolution/test_import_resolution_remove.py
  234. +2 −2 tests/unit/codegen/sdk/typescript/import_resolution/test_import_resolution_rename.py
  235. +7 −7 tests/unit/codegen/sdk/typescript/import_resolution/test_import_resolution_set_import_module.py
  236. +2 −2 ...s/unit/codegen/sdk/typescript/import_resolution/test_import_resolution_set_import_symbol_alias.py
  237. +2 −2 tests/unit/codegen/sdk/typescript/interface/test_interface_attributes.py
  238. +4 −4 tests/unit/codegen/sdk/typescript/interface/test_interface_dependencies.py
  239. +2 −2 tests/unit/codegen/sdk/typescript/interface/test_interface_get_attribute.py
  240. +2 −2 tests/unit/codegen/sdk/typescript/interface/test_interface_parents.py
  241. +1 −1 ...n/sdk/typescript/statements/assignment_statement/test_assignment_statement_get_variable_usages.py
  242. +2 −2 tests/unit/codegen/sdk/typescript/statements/attribute/test_attribute_properties.py
  243. +32 −32 tests/unit/codegen/sdk/typescript/tsx/test_tsx_edit.py
  244. +14 −14 tests/unit/codegen/sdk/typescript/tsx/test_tsx_parsing.py
  245. +2 −2 tests/unit/codegen/sdk/typescript/type/test_type_dependencies.py
  246. +4 −4 tests/unit/skills/implementations/guides/code-quality-metrics/import-loops.py
  247. +102 −1 uv.lock
15 changes: 15 additions & 0 deletions .github/actions/release-pypi/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: "Release PyPI"
description: "Release PyPI"
inputs:
pypi-token:
required: true
description: "PyPI token"
runs:
using: "composite"
steps:
- name: Release PyPI
shell: bash
run: |
export UV_PUBLISH_PASSWORD="${{ inputs.pypi-token }}"
export UV_PUBLISH_USERNAME="__token__"
uv publish --publish-url https://upload.pypi.org/legacy/
23 changes: 23 additions & 0 deletions .github/actions/release-slack-bot/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: "Release Slack Bot"
description: "Release Slack Bot"
inputs:
slack-token:
required: true
description: "Slack token"
runs:
using: "composite"
steps:
# TODO: use python exec instead
- uses: slackapi/slack-github-action@v2.0.0
with:
method: chat.postMessage
token: ${{ inputs.slack-token }}
payload: |
username: ${{ job.status == 'success' && format('Released codegen@{0}', github.ref_name) || format('Failed to release codegen@{0}', github.ref_name) }}
channel: "#release"
icon_emoji: "${{ job.status == 'success' && ':white_check_mark:' || ':x:' }}"
text: |
Actor: `${{ github.triggering_actor }}`
Author: `${{ github.event.head_commit.author.username }}`
${{ format('Commit: <{0}/{1}/commit/{2}|{1}@{2}>', github.server_url, github.repository, github.sha) || ''}}
View <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|GHA logs>
Original file line number Diff line number Diff line change
@@ -38,7 +38,7 @@ runs:
run: |
uv run codecovcli create-commit -t ${{ inputs.codecov_token }}
uv run codecovcli create-report -t ${{ inputs.codecov_token }}
bash .github/actions/run_ats/ats.sh
bash .github/actions/run-ats/ats.sh
- name: Run tests
shell: bash
File renamed without changes.
19 changes: 13 additions & 6 deletions .github/workflows/auto-release.yml
Original file line number Diff line number Diff line change
@@ -3,15 +3,14 @@ on:
push:
branches:
- develop
workflow_dispatch:

permissions:
contents: read

jobs:
release:
name: Release
semantic-version:
if: false # TODO(CG-10755): merge this with release.yml
name: Semantic version
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.semantic.outputs.release-version }}
permissions:
checks: read # to wait for required checks
contents: write # to be able to publish a GitHub release
@@ -36,3 +35,11 @@ jobs:
id: semantic
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

release:
needs: semantic-version
uses: ./.github/workflows/release.yml
permissions:
contents: write
with:
tag: ${{ needs.semantic-version.outputs.tag }}
4 changes: 2 additions & 2 deletions .github/workflows/cache-warm-up.yml
Original file line number Diff line number Diff line change
@@ -27,7 +27,7 @@ jobs:
with:
ref: develop # Ensure we're operating on the 'develop' branch

- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment

warm-up-cache:
@@ -46,7 +46,7 @@ jobs:
with:
ref: develop # Ensure we're operating on the 'develop' branch

- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment

- name: Cache oss-repos
2 changes: 1 addition & 1 deletion .github/workflows/mypy.yml
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ jobs:
with:
fetch-depth: 0

- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment

- name: Get changed files
2 changes: 1 addition & 1 deletion .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@ jobs:
ref: ${{ github.event.pull_request.head.ref }}
token: ${{ secrets.REPO_SCOPED_TOKEN }}

- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment

- name: Setup-pre-commit
47 changes: 24 additions & 23 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
name: Build & Release

on:
workflow_call:
inputs:
tag:
required: true
type: string
description: Tag to release
# TODO(CG-10758): create if it does not exist
# workflow_dispatch:
# inputs:
# tag:
# required: true
# type: string
# description: Tag to release # TODO: create if it does not exist
push:
tags:
- v*
branches:
- develop
pull_request:
branches:
- develop
workflow_dispatch:

permissions:
contents: read
@@ -41,7 +51,7 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.ref || github.ref }}
ref: ${{ inputs.tag || github.event.pull_request.head.ref || github.ref }}

- name: Install UV
uses: astral-sh/setup-uv@v5.2
@@ -70,7 +80,7 @@ jobs:
path: ./wheelhouse/*.whl

release:
if: startsWith(github.ref, 'refs/tags/')
if: ${{ inputs.tag || startsWith(github.ref, 'refs/tags/') }}
needs: build
runs-on: ubuntu-latest
environment: release
@@ -90,31 +100,22 @@ jobs:
pattern: wheels-*

- name: Release PyPI
run: |
export UV_PUBLISH_PASSWORD="${{ secrets.PYPI_TOKEN }}"
export UV_PUBLISH_USERNAME="__token__"
uv publish --publish-url https://upload.pypi.org/legacy/
uses: ./.github/actions/release-pypi
with:
pypi-token: ${{ secrets.PYPI_TOKEN }}

- name: Github release
id: github-release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ inputs.tag || github.ref_name }}
files: dist/*
fail_on_unmatched_files: true
generate_release_notes: true
generate_release_notes: ${{ startsWith(github.ref, 'refs/tags/') }}

# TODO: use python exec instead
- uses: slackapi/slack-github-action@v2.0.0
- name: Slack notification
if: always()
uses: ./.github/actions/release-slack-bot
with:
method: chat.postMessage
token: ${{ secrets.SLACK_BOT_TOKEN }}
payload: |
username: ${{ job.status == 'success' && format('Released codegen@{0}', github.ref_name) || format('Failed to release codegen@{0}', github.ref_name) }}
channel: "#release"
icon_emoji: "${{ job.status == 'success' && ':white_check_mark:' || ':x:' }}"
text: |
Actor: `${{ github.triggering_actor }}`
Author: `${{ github.event.head_commit.author.username }}`
${{ format('Commit: <{0}/{1}/commit/{2}|{1}@{2}>', github.server_url, github.repository, github.sha) || ''}}
View <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|GHA logs>
release-tag: ${{ github.ref_name }}
slack-token: ${{ secrets.SLACK_BOT_TOKEN }}
12 changes: 6 additions & 6 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
@@ -17,10 +17,10 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment
- name: Run ATS and Tests
uses: ./.github/actions/run_ats
uses: ./.github/actions/run-ats
timeout-minutes: 15
with:
default_tests: "tests/unit"
@@ -48,12 +48,12 @@ jobs:
name: "Codemod tests ${{matrix.size}}: Sync Graph=${{matrix.sync_graph}}"
steps:
- uses: actions/checkout@v4
- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment
- name: Cache oss-repos
uses: ./.github/actions/setup-oss-repos
- name: Run ATS and Tests
uses: ./.github/actions/run_ats
uses: ./.github/actions/run-ats
timeout-minutes: 15
with:
default_tests: "tests/integration/codemod/test_codemods.py"
@@ -71,7 +71,7 @@ jobs:
environment: parse-tests
steps:
- uses: actions/checkout@v4
- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment

- name: Cache oss-repos
@@ -135,7 +135,7 @@ jobs:
runs-on: ubuntu-latest-16
steps:
- uses: actions/checkout@v4
- name: Setup backend
- name: Setup environment
uses: ./.github/actions/setup-environment
- name: Test with pytest
timeout-minutes: 5
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -79,7 +79,7 @@ repos:
hooks:
- id: renovate-config-validator
- repo: https://github.com/astral-sh/uv-pre-commit
rev: "0.5.29"
rev: "0.5.30"
hooks:
- id: uv-sync
args: ["--frozen", "--all-packages", "--all-extras"]
2 changes: 1 addition & 1 deletion codegen-examples/pyproject.toml
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ name = "codegen-examples"
version = "0.0.0"
readme = "README.md"
requires-python = ">=3.12, <3.14"
dependencies = ["codegen==0.5.30"]
dependencies = ["codegen==0.6.1"]
license = { file = "LICENSE" }
classifiers = [
"License :: OSI Approved :: Apache Software License",
92 changes: 84 additions & 8 deletions docs/building-with-codegen/dependencies-and-usages.mdx
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@ Codegen pre-computes dependencies and usages for all symbols in the codebase, en

Codegen provides two main ways to track relationships between symbols:

- [.dependencies](/api-reference/core/Symbol#dependencies) / [.get_dependencies(...)](/api-reference/core/Symbol#get-dependencies) - What symbols does this symbol depend on?
- [.dependencies](/api-reference/core/Symbol#dependencies) / - What symbols does this symbol depend on?
- [.usages](/api-reference/core/Symbol#usages) / [.usages(...)](/api-reference/core/Symbol#usages) - Where is this symbol used?

Dependencies and usages are inverses of each other. For example, given the following input code:
@@ -129,12 +129,12 @@ The dependencies API lets you find what symbols a given symbol depends on.

```python
# Get all direct dependencies
deps = my_class.dependencies # Shorthand for get_dependencies(UsageType.DIRECT)
deps = my_class.dependencies # Shorthand for dependencies(UsageType.DIRECT)

# Get dependencies of specific types
direct_deps = my_class.get_dependencies(UsageType.DIRECT)
chained_deps = my_class.get_dependencies(UsageType.CHAINED)
indirect_deps = my_class.get_dependencies(UsageType.INDIRECT)
direct_deps = my_class.dependencies(UsageType.DIRECT)
chained_deps = my_class.dependencies(UsageType.CHAINED)
indirect_deps = my_class.dependencies(UsageType.INDIRECT)
```

### Combining Usage Types
@@ -143,10 +143,10 @@ You can combine usage types using the bitwise OR operator:

```python
# Get both direct and indirect dependencies
deps = my_class.get_dependencies(UsageType.DIRECT | UsageType.INDIRECT)
deps = my_class.dependencies(UsageType.DIRECT | UsageType.INDIRECT)

# Get all types of dependencies
deps = my_class.get_dependencies(
deps = my_class.dependencies(
UsageType.DIRECT | UsageType.CHAINED |
UsageType.INDIRECT | UsageType.ALIASED
)
@@ -178,7 +178,83 @@ class_imports = [dep for dep in my_class.dependencies if isinstance(dep, Import)

# Get all imports used by a function, including indirect ones
all_function_imports = [
dep for dep in my_function.get_dependencies(UsageType.DIRECT | UsageType.INDIRECT)
dep for dep in my_function.dependencies(UsageType.DIRECT | UsageType.INDIRECT)
if isinstance(dep, Import)
]
```
## Traversing the Dependency Graph

Sometimes you need to analyze not just direct dependencies, but the entire dependency graph up to a certain depth. The `dependencies` method allows you to traverse the dependency graph and collect all dependencies up to a specified depth level.

### Basic Usage

```python

# Get only direct dependencies
deps = symbol.dependencies(max_depth=1)

# Get deep dependencies (up to 5 levels)
deps = symbol.dependencies(max_depth=5)
```

The method returns a dictionary mapping each symbol to its list of direct dependencies. This makes it easy to analyze the dependency structure:

```python
# Print the dependency tree
for sym, direct_deps in deps.items():
print(f"{sym.name} depends on: {[d.name for d in direct_deps]}")
```

### Example: Analyzing Class Inheritance

Here's an example of using `dependencies` to analyze a class inheritance chain:

```python
class A:
def method_a(self): pass

class B(A):
def method_b(self):
self.method_a()

class C(B):
def method_c(self):
self.method_b()

# Get the full inheritance chain
symbol = codebase.get_class("C")
deps = symbol.dependencies(
max_depth=3
)

# Will show:
# C depends on: [B]
# B depends on: [A]
# A depends on: []
```

### Handling Cyclic Dependencies

The method properly handles cyclic dependencies in the codebase:

```python
class A:
def method_a(self):
return B()

class B:
def method_b(self):
return A()

# Get dependencies including cycles
symbol = codebase.get_class("A")
deps = symbol.dependencies()

# Will show:
# A depends on: [B]
# B depends on: [A]
```

<Tip>
The `max_depth` parameter helps prevent excessive recursion in large codebases or when there are cycles in the dependency graph.
</Tip>
Loading