github-code-review 4.0.2__tar.gz → 4.0.4__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 (63) hide show
  1. {github_code_review-4.0.2 → github_code_review-4.0.4}/PKG-INFO +17 -11
  2. {github_code_review-4.0.2 → github_code_review-4.0.4}/README.md +16 -10
  3. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/__main__.py +1 -0
  4. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/bootstrap.py +5 -7
  5. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/cli.py +37 -48
  6. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/cli_base.py +8 -13
  7. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/deploy.py +127 -112
  8. github_code_review-4.0.4/gito/commands/fix.py +203 -0
  9. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/gh_post_review_comment.py +3 -6
  10. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/gh_react_to_comment.py +28 -23
  11. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/gitlab_post_review_comment.py +4 -9
  12. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/linear_comment.py +8 -8
  13. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/repl.py +1 -0
  14. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/version.py +2 -1
  15. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/config.toml +2 -2
  16. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/constants.py +4 -3
  17. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/core.py +45 -74
  18. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/gh_api.py +4 -9
  19. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/git_installation_check.py +1 -0
  20. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/gitlab.py +3 -3
  21. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/issue_trackers.py +3 -3
  22. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/pipeline.py +4 -12
  23. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/pipeline_steps/jira.py +9 -16
  24. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/pipeline_steps/linear.py +6 -17
  25. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/project_config.py +6 -5
  26. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/report_struct.py +75 -18
  27. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/cli.py +18 -17
  28. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git.py +1 -0
  29. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/__init__.py +2 -1
  30. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/adapters/base.py +1 -0
  31. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/adapters/gitlab.py +1 -1
  32. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/github.py +6 -5
  33. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/gitlab.py +8 -7
  34. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/platform_types.py +7 -3
  35. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/shared.py +7 -10
  36. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/html.py +2 -1
  37. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/markdown.py +1 -0
  38. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/package_metadata.py +1 -0
  39. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/python.py +2 -3
  40. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/string.py +2 -2
  41. {github_code_review-4.0.2 → github_code_review-4.0.4}/pyproject.toml +10 -1
  42. github_code_review-4.0.2/gito/commands/fix.py +0 -173
  43. {github_code_review-4.0.2 → github_code_review-4.0.4}/LICENSE +0 -0
  44. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/__init__.py +0 -0
  45. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/commands/__init__.py +0 -0
  46. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/context.py +0 -0
  47. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/entrypoint.py +0 -0
  48. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/env.py +0 -0
  49. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/pipeline_steps/__init__.py +0 -0
  50. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/answer.j2 +0 -0
  51. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/partial/aux_files.j2 +0 -0
  52. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/questions/changes_summary.j2 +0 -0
  53. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/questions/release_notes.j2 +0 -0
  54. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/questions/test_cases.j2 +0 -0
  55. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/workflows/github/components/env-vars.j2 +0 -0
  56. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/workflows/github/components/installs.j2 +0 -0
  57. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/workflows/github/gito-code-review.yml.j2 +0 -0
  58. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/workflows/github/gito-react-to-comments.yml.j2 +0 -0
  59. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/workflows/gitlab/.gitlab-ci.yml.j2 +0 -0
  60. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/tpl/workflows/gitlab/gito-code-review.yml.j2 +0 -0
  61. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/__init__.py +0 -0
  62. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/adapters/__init__.py +0 -0
  63. {github_code_review-4.0.2 → github_code_review-4.0.4}/gito/utils/git_platform/adapters/github.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: github-code-review
3
- Version: 4.0.2
3
+ Version: 4.0.4
4
4
  Summary: AI code review tool that works with any language model provider. It detects issues in GitHub pull requests or local changes—instantly, reliably, and without vendor lock-in.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -104,11 +104,12 @@ Get consistent, thorough code reviews in seconds—no waiting for human availabi
104
104
  ## 🌐 Supported Platforms & Integrations<a id="-supported-platforms--integrations"></a>
105
105
 
106
106
  ### 🧩 Git Platforms
107
- | Platform | Status |
108
- |-----------|----------------------|
109
- | GitHub | ✅ Supported |
110
- | GitLab | 🧪 Supported (Beta) |
111
- | Bitbucket | 🛠️ Planned |
107
+ | Platform | Status |
108
+ |-------------|----------------------|
109
+ | GitHub | ✅ Supported |
110
+ | GitLab | 🧪 Supported (Beta) |
111
+ | Bitbucket | 🛠️ Planned |
112
+ | Local / CLI | ✅ Supported |
112
113
 
113
114
  > ℹ️ Gito ships ready-to-use CI/CD workflows for these platforms,
114
115
  > with full support for triggering actions via PR comments, automatic review posting, and PR lifecycle integration.
@@ -211,7 +212,7 @@ pip install gito.bot
211
212
  ```
212
213
 
213
214
  > **Troubleshooting:**
214
- > pip may also be available via cli as `pip3` depending on your Python installation.
215
+ > pip may also be available via CLI as `pip3` depending on your Python installation.
215
216
 
216
217
  To install from repository source / specific branch:
217
218
  ```bash
@@ -376,32 +377,37 @@ PATs have broader permissions, longer lifespans, and are tied to individual user
376
377
  ## 💻 Development Setup<a id="-development-setup"></a>
377
378
 
378
379
  Clone the repository and navigate to it:
380
+
379
381
  ```bash
380
382
  git clone https://github.com/Nayjest/Gito.git
381
383
  cd Gito
382
384
  ```
385
+
383
386
  <div><img align="right" width="460" src="https://raw.githubusercontent.com/Nayjest/Gito/4_0_1/press-kit/character/gito_fullbody_1.jpg">
384
387
 
385
388
  Install dependencies:
389
+
386
390
  ```bash
387
391
  make install
388
392
  ```
389
- > **Note:** If `make` is not available on your system, you can run the underlying command directly:
390
- > ```bash
391
- > pip install -e ".[dev]"
392
- > ```
393
+
394
+ > **Note:** If `make` is not available on your system, you can run the underlying command directly:
395
+ > `pip install -e ".[dev]"`
393
396
  > See the [Makefile](https://github.com/Nayjest/Gito/blob/main/Makefile) for all available commands.
394
397
 
395
398
  Format code and check style:
399
+
396
400
  ```bash
397
401
  make black
398
402
  make cs
399
403
  ```
400
404
 
401
405
  Run tests:
406
+
402
407
  ```bash
403
408
  pytest
404
409
  ```
410
+
405
411
  </div>
406
412
 
407
413
  ## 🤝 Contributing<a id="-contributing"></a>
@@ -59,11 +59,12 @@ Get consistent, thorough code reviews in seconds—no waiting for human availabi
59
59
  ## 🌐 Supported Platforms & Integrations<a id="-supported-platforms--integrations"></a>
60
60
 
61
61
  ### 🧩 Git Platforms
62
- | Platform | Status |
63
- |-----------|----------------------|
64
- | GitHub | ✅ Supported |
65
- | GitLab | 🧪 Supported (Beta) |
66
- | Bitbucket | 🛠️ Planned |
62
+ | Platform | Status |
63
+ |-------------|----------------------|
64
+ | GitHub | ✅ Supported |
65
+ | GitLab | 🧪 Supported (Beta) |
66
+ | Bitbucket | 🛠️ Planned |
67
+ | Local / CLI | ✅ Supported |
67
68
 
68
69
  > ℹ️ Gito ships ready-to-use CI/CD workflows for these platforms,
69
70
  > with full support for triggering actions via PR comments, automatic review posting, and PR lifecycle integration.
@@ -166,7 +167,7 @@ pip install gito.bot
166
167
  ```
167
168
 
168
169
  > **Troubleshooting:**
169
- > pip may also be available via cli as `pip3` depending on your Python installation.
170
+ > pip may also be available via CLI as `pip3` depending on your Python installation.
170
171
 
171
172
  To install from repository source / specific branch:
172
173
  ```bash
@@ -331,32 +332,37 @@ PATs have broader permissions, longer lifespans, and are tied to individual user
331
332
  ## 💻 Development Setup<a id="-development-setup"></a>
332
333
 
333
334
  Clone the repository and navigate to it:
335
+
334
336
  ```bash
335
337
  git clone https://github.com/Nayjest/Gito.git
336
338
  cd Gito
337
339
  ```
340
+
338
341
  <div><img align="right" width="460" src="https://raw.githubusercontent.com/Nayjest/Gito/4_0_1/press-kit/character/gito_fullbody_1.jpg">
339
342
 
340
343
  Install dependencies:
344
+
341
345
  ```bash
342
346
  make install
343
347
  ```
344
- > **Note:** If `make` is not available on your system, you can run the underlying command directly:
345
- > ```bash
346
- > pip install -e ".[dev]"
347
- > ```
348
+
349
+ > **Note:** If `make` is not available on your system, you can run the underlying command directly:
350
+ > `pip install -e ".[dev]"`
348
351
  > See the [Makefile](https://github.com/Nayjest/Gito/blob/main/Makefile) for all available commands.
349
352
 
350
353
  Format code and check style:
354
+
351
355
  ```bash
352
356
  make black
353
357
  make cs
354
358
  ```
355
359
 
356
360
  Run tests:
361
+
357
362
  ```bash
358
363
  pytest
359
364
  ```
365
+
360
366
  </div>
361
367
 
362
368
  ## 🤝 Contributing<a id="-contributing"></a>
@@ -1,4 +1,5 @@
1
1
  """Allow running the package with `python -m gito`."""
2
+
2
3
  # Use an absolute import (package-qualified) here; otherwise, the Windows build
3
4
  # produced by PyInstaller fails.
4
5
  from gito.entrypoint import main
@@ -1,4 +1,5 @@
1
1
  """Bootstrap module for initializing the Gito application environment."""
2
+
2
3
  import os
3
4
  import sys
4
5
  import io
@@ -16,6 +17,7 @@ from .env import Env
16
17
 
17
18
  def setup_logging(log_level: int = logging.INFO):
18
19
  """Setup custom CLI logging format with colored output."""
20
+
19
21
  class CustomFormatter(logging.Formatter):
20
22
  def format(self, record):
21
23
  dt = datetime.fromtimestamp(record.created).strftime("%Y-%m-%d %H:%M:%S")
@@ -49,23 +51,19 @@ def bootstrap(verbosity: int = 1):
49
51
  Env.logging_level = log_levels_by_verbosity.get(verbosity, logging.INFO)
50
52
  setup_logging(Env.logging_level)
51
53
  logging.info(
52
- f"Bootstrapping Gito v{Env.gito_version}... "
53
- + mc.ui.gray(f"[verbosity={verbosity}]")
54
+ f"Bootstrapping Gito v{Env.gito_version}... " + mc.ui.gray(f"[verbosity={verbosity}]")
54
55
  )
55
56
 
56
57
  # cp1251 is used on Windows when redirecting output
57
58
  if sys.stdout.encoding and sys.stdout.encoding.lower() != "utf-8":
58
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
59
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
59
60
 
60
61
  try:
61
62
  mc.configure(
62
63
  DOT_ENV_FILE=HOME_ENV_PATH,
63
64
  USE_LOGGING=verbosity >= 1,
64
65
  EMBEDDING_DB_TYPE=mc.EmbeddingDbType.NONE,
65
- PROMPT_TEMPLATES_PATH=[
66
- PROJECT_GITO_FOLDER,
67
- Path(__file__).parent / "tpl"
68
- ],
66
+ PROMPT_TEMPLATES_PATH=[PROJECT_GITO_FOLDER, Path(__file__).parent / "tpl"],
69
67
  )
70
68
  if mc.config().MAX_CONCURRENT_TASKS is None:
71
69
  mc.config().MAX_CONCURRENT_TASKS = DEFAULT_MAX_CONCURRENT_TASKS
@@ -38,6 +38,7 @@ from .project_config import ProjectConfig
38
38
  from .commands.gh_post_review_comment import post_github_cr_comment
39
39
  from .commands.gitlab_post_review_comment import post_gitlab_cr_comment
40
40
  from .commands.linear_comment import linear_comment
41
+
41
42
  # Imported for registering commands
42
43
  from .commands import fix, gh_react_to_comment, repl, deploy, version # noqa
43
44
 
@@ -61,34 +62,33 @@ def main():
61
62
  @app.callback(
62
63
  invoke_without_command=True,
63
64
  help="\bGito is an open-source AI code reviewer that works with any language model provider."
64
- "\nIt detects issues in GitHub pull requests or local codebase changes"
65
- "—instantly, reliably, and without vendor lock-in."
65
+ "\nIt detects issues in GitHub pull requests or local codebase changes"
66
+ "—instantly, reliably, and without vendor lock-in.",
66
67
  )
67
68
  def cli(
68
69
  ctx: typer.Context,
69
70
  verbosity: int = typer.Option(
70
71
  None,
71
- '--verbosity', '-v',
72
+ "--verbosity",
73
+ "-v",
72
74
  show_default=False,
73
75
  help="\b"
74
- "Set verbosity level. Supported values: 0-3. Default: 1."
75
- "\n [ 0 ]: no additional output, "
76
- "\n [ 1 ]: normal mode, shows warnings, shortened LLM requests and logging.INFO"
77
- "\n [ 2 ]: verbose mode, show full LLM requests"
78
- "\n [ 3 ]: very verbose mode, also debug information"
76
+ "Set verbosity level. Supported values: 0-3. Default: 1."
77
+ "\n [ 0 ]: no additional output, "
78
+ "\n [ 1 ]: normal mode, shows warnings, shortened LLM requests and logging.INFO"
79
+ "\n [ 2 ]: verbose mode, show full LLM requests"
80
+ "\n [ 3 ]: very verbose mode, also debug information",
79
81
  ),
80
82
  verbose: bool = typer.Option(
81
83
  default=None,
82
84
  help="\b"
83
- "--verbose is equivalent to -v2, "
84
- "\n--no-verbose is equivalent to -v0. "
85
- "\n(!) Can't be used together with -v or --verbosity."
85
+ "--verbose is equivalent to -v2, "
86
+ "\n--no-verbose is equivalent to -v0. "
87
+ "\n(!) Can't be used together with -v or --verbosity.",
86
88
  ),
87
89
  ):
88
90
  if verbose is not None and verbosity is not None:
89
- raise typer.BadParameter(
90
- "Please specify either --verbose or --verbosity, not both."
91
- )
91
+ raise typer.BadParameter("Please specify either --verbose or --verbosity, not both.")
92
92
  if verbose is not None:
93
93
  verbosity = 2 if verbose else 0
94
94
  if verbosity is None:
@@ -127,16 +127,17 @@ def cmd_review(
127
127
  url: str = typer.Option("", "--url", help="Git repository URL"),
128
128
  path: str = typer.Option("", "--path", help="Git repository path"), # @todo: implement
129
129
  post_comment: bool = typer.Option(
130
- default=False,
131
- help="Post review comment to git platform (GitHub, GitLab, etc.)"
130
+ default=False, help="Post review comment to git platform (GitHub, GitLab, etc.)"
132
131
  ),
133
132
  pr: int = typer.Option(
134
133
  default=None,
135
- help=textwrap.dedent("""\n
134
+ help=textwrap.dedent(
135
+ """\n
136
136
  GitHub Pull Request number or GitLab Merge Request ID to post the comment to
137
137
  (for local usage together with --post-comment,
138
138
  in the GitHub/GitLab actions PR/MR is resolved from the environment)
139
- """)
139
+ """
140
+ ),
140
141
  ),
141
142
  out: str = arg_out(),
142
143
  all: bool = arg_all(),
@@ -144,7 +145,7 @@ def cmd_review(
144
145
  refs, merge_base = _consider_arg_all(all, refs, merge_base)
145
146
  _what, _against = args_to_target(refs, what, against)
146
147
  pr = pr or os.getenv("PR_NUMBER_FROM_WORKFLOW_DISPATCH")
147
- with (get_repo_context(url, _what) as (repo, out_folder)):
148
+ with get_repo_context(url, _what) as (repo, out_folder):
148
149
  commit_sha = repo.head.commit.hexsha
149
150
  try:
150
151
  active_branch = repo.active_branch.name
@@ -161,11 +162,13 @@ def cmd_review(
161
162
  commit_sha=commit_sha,
162
163
  active_branch=active_branch,
163
164
  )
164
- asyncio.run(review(
165
- repo=repo,
166
- target=review_target,
167
- out_folder=out or out_folder,
168
- ))
165
+ asyncio.run(
166
+ review(
167
+ repo=repo,
168
+ target=review_target,
169
+ out_folder=out or out_folder,
170
+ )
171
+ )
169
172
  if post_comment:
170
173
 
171
174
  md_report_file = os.path.join(out or out_folder, GITHUB_MD_REPORT_FILE_NAME)
@@ -205,22 +208,12 @@ def cmd_answer(
205
208
  merge_base: bool = typer.Option(default=True, help="Use merge base for comparison"),
206
209
  use_pipeline: bool = typer.Option(default=True),
207
210
  post_to: str = typer.Option(
208
- help="Post answer to ... Supported values: linear",
209
- default=None,
210
- show_default=False
211
- ),
212
- pr: int = typer.Option(
213
- default=None,
214
- help="GitHub Pull Request number"
215
- ),
216
- aux_files: list[str] = typer.Option(
217
- default=None,
218
- help="Auxiliary files that might be helpful"
211
+ help="Post answer to ... Supported values: linear", default=None, show_default=False
219
212
  ),
213
+ pr: int = typer.Option(default=None, help="GitHub Pull Request number"),
214
+ aux_files: list[str] = typer.Option(default=None, help="Auxiliary files that might be helpful"),
220
215
  save_to: str = typer.Option(
221
- help="Write the answer to the target file",
222
- default=None,
223
- show_default=False
216
+ help="Write the answer to the target file", default=None, show_default=False
224
217
  ),
225
218
  all: bool = arg_all(),
226
219
  ):
@@ -243,7 +236,7 @@ def cmd_answer(
243
236
  pr=pr,
244
237
  aux_files=aux_files,
245
238
  )
246
- if post_to == 'linear':
239
+ if post_to == "linear":
247
240
  logging.info("Posting answer to Linear...")
248
241
  linear_comment(remove_html_comments(out))
249
242
  if save_to:
@@ -264,23 +257,19 @@ def setup():
264
257
  @app.command(name="render", hidden=True)
265
258
  def render(
266
259
  format: str = typer.Argument(
267
- default=Report.Format.CLI,
268
- help="Report format: md (Markdown), cli (terminal)"
260
+ default=Report.Format.CLI, help="Report format: md (Markdown), cli (terminal)"
269
261
  ),
270
262
  source: str = typer.Option(
271
- "",
272
- "--src",
273
- "--source",
274
- help="Source file (json) to load the report from"
275
- )
263
+ "", "--src", "--source", help="Source file (json) to load the report from"
264
+ ),
276
265
  ):
277
266
  Report.load(file_name=source).to_cli(report_format=format)
278
267
 
279
268
 
280
269
  @app.command(
281
270
  help="\bList files in the changeset. "
282
- "\nMight be useful to check what will be reviewed if run `gito review` "
283
- "with current CLI arguments and options."
271
+ "\nMight be useful to check what will be reviewed if run `gito review` "
272
+ "with current CLI arguments and options."
284
273
  )
285
274
  def files(
286
275
  refs: str = arg_refs(),
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Common CLI arguments and utilities for Gito commands.
3
3
  """
4
+
4
5
  import contextlib
5
6
  import logging
6
7
  import tempfile
@@ -57,7 +58,10 @@ def arg_what() -> typer.Option:
57
58
 
58
59
  def arg_filters() -> typer.Option:
59
60
  return typer.Option(
60
- "", "--filter", "-f", "--filters",
61
+ "",
62
+ "--filter",
63
+ "-f",
64
+ "--filters",
61
65
  help="""
62
66
  filter reviewed files by glob / fnmatch pattern(s),
63
67
  e.g. 'src/**/*.py', may be comma-separated
@@ -67,18 +71,12 @@ def arg_filters() -> typer.Option:
67
71
 
68
72
  def arg_out() -> typer.Option:
69
73
  return typer.Option(
70
- None,
71
- "--out", "-o", "--output",
72
- help="Output folder for the code review report"
74
+ None, "--out", "-o", "--output", help="Output folder for the code review report"
73
75
  )
74
76
 
75
77
 
76
78
  def arg_against() -> typer.Option:
77
- return typer.Option(
78
- None,
79
- "--against", "-vs", "--vs",
80
- help="Git ref to compare against"
81
- )
79
+ return typer.Option(None, "--against", "-vs", "--vs", help="Git ref to compare against")
82
80
 
83
81
 
84
82
  def arg_all() -> typer.Option:
@@ -86,10 +84,7 @@ def arg_all() -> typer.Option:
86
84
 
87
85
 
88
86
  @contextlib.contextmanager
89
- def get_repo_context(
90
- url: str | None,
91
- branch: str | None
92
- ) -> Iterator[tuple[Repo, str]]:
87
+ def get_repo_context(url: str | None, branch: str | None) -> Iterator[tuple[Repo, str]]:
93
88
  """
94
89
  Context manager for handling both local and remote repositories.
95
90
  Yields a tuple of (Repo object, path to the repository)