cfengine 0.7.1__tar.gz → 0.7.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 (55) hide show
  1. {cfengine-0.7.1 → cfengine-0.7.2}/.github/workflows/pypi-publish.yml +1 -1
  2. {cfengine-0.7.1 → cfengine-0.7.2}/PKG-INFO +4 -5
  3. {cfengine-0.7.1 → cfengine-0.7.2}/pyproject.toml +3 -4
  4. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine.egg-info/PKG-INFO +4 -5
  5. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine.egg-info/SOURCES.txt +2 -1
  6. cfengine-0.7.2/src/cfengine.egg-info/requires.txt +5 -0
  7. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/commands.py +18 -18
  8. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/docs.py +61 -52
  9. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/format.py +27 -27
  10. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/lint.py +32 -5
  11. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/main.py +2 -1
  12. cfengine-0.7.2/tests/shell/003-format.sh +37 -0
  13. {cfengine-0.7.1 → cfengine-0.7.2}/uv.lock +43 -222
  14. cfengine-0.7.1/src/cfengine.egg-info/requires.txt +0 -6
  15. {cfengine-0.7.1 → cfengine-0.7.2}/.github/dependabot.yml +0 -0
  16. {cfengine-0.7.1 → cfengine-0.7.2}/.github/workflows/format.yml +0 -0
  17. {cfengine-0.7.1 → cfengine-0.7.2}/.github/workflows/lint.yml +0 -0
  18. {cfengine-0.7.1 → cfengine-0.7.2}/.github/workflows/test.yml +0 -0
  19. {cfengine-0.7.1 → cfengine-0.7.2}/.gitignore +0 -0
  20. {cfengine-0.7.1 → cfengine-0.7.2}/.python-version +0 -0
  21. {cfengine-0.7.1 → cfengine-0.7.2}/HACKING.md +0 -0
  22. {cfengine-0.7.1 → cfengine-0.7.2}/LICENSE +0 -0
  23. {cfengine-0.7.1 → cfengine-0.7.2}/README.md +0 -0
  24. {cfengine-0.7.1 → cfengine-0.7.2}/ci/01-install.sh +0 -0
  25. {cfengine-0.7.1 → cfengine-0.7.2}/ci/02-safe-tests.sh +0 -0
  26. {cfengine-0.7.1 → cfengine-0.7.2}/ci/03-unsafe-tests.sh +0 -0
  27. {cfengine-0.7.1 → cfengine-0.7.2}/setup.cfg +0 -0
  28. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine.egg-info/dependency_links.txt +0 -0
  29. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine.egg-info/entry_points.txt +0 -0
  30. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine.egg-info/top_level.txt +0 -0
  31. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/__init__.py +0 -0
  32. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/__main__.py +0 -0
  33. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/deptool.py +0 -0
  34. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/dev.py +0 -0
  35. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/paths.py +0 -0
  36. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/shell.py +0 -0
  37. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/utils.py +0 -0
  38. {cfengine-0.7.1 → cfengine-0.7.2}/src/cfengine_cli/version.py +0 -0
  39. {cfengine-0.7.1 → cfengine-0.7.2}/tests/__init__.py +0 -0
  40. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/001_hello_world.expected.cf +0 -0
  41. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/001_hello_world.input.cf +0 -0
  42. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/002_basics.expected.cf +0 -0
  43. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/002_basics.input.cf +0 -0
  44. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/003_wrapping.expected.cf +0 -0
  45. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/003_wrapping.input.cf +0 -0
  46. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/004_comments.expected.cf +0 -0
  47. {cfengine-0.7.1 → cfengine-0.7.2}/tests/format/004_comments.input.cf +0 -0
  48. {cfengine-0.7.1 → cfengine-0.7.2}/tests/run-format-tests.sh +0 -0
  49. {cfengine-0.7.1 → cfengine-0.7.2}/tests/run-shell-tests.sh +0 -0
  50. {cfengine-0.7.1 → cfengine-0.7.2}/tests/shell/001-help.sh +0 -0
  51. {cfengine-0.7.1 → cfengine-0.7.2}/tests/shell/002-version.sh +0 -0
  52. {cfengine-0.7.1 → cfengine-0.7.2}/tests/test_deps.py +0 -0
  53. {cfengine-0.7.1 → cfengine-0.7.2}/tests/test_paths.py +0 -0
  54. {cfengine-0.7.1 → cfengine-0.7.2}/tests/test_utils.py +0 -0
  55. {cfengine-0.7.1 → cfengine-0.7.2}/tests/test_version.py +0 -0
@@ -51,4 +51,4 @@ jobs:
51
51
  name: release-dists
52
52
  path: dist/
53
53
  - name: Publish release distributions to PyPI
54
- uses: pypa/gh-action-pypi-publish@v1.12.4
54
+ uses: pypa/gh-action-pypi-publish@v1.13.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: Human-oriented CLI for interacting with CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -692,14 +692,13 @@ Classifier: Programming Language :: Python :: 3.11
692
692
  Classifier: Programming Language :: Python :: 3.12
693
693
  Classifier: Programming Language :: Python :: 3.13
694
694
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
695
- Requires-Python: >=3.9
695
+ Requires-Python: >=3.10
696
696
  Description-Content-Type: text/markdown
697
697
  Requires-Dist: cf-remote>=0.6.4
698
698
  Requires-Dist: cfbs>=4.4.3
699
- Requires-Dist: tree-sitter-cfengine>=1.0.8
700
- Requires-Dist: tree-sitter>=0.23
699
+ Requires-Dist: tree-sitter-cfengine>=1.0.11
700
+ Requires-Dist: tree-sitter>=0.25
701
701
  Requires-Dist: markdown-it-py>=3.0.0
702
- Requires-Dist: black>=25.1.0
703
702
 
704
703
  # CFEngine command line interface (CLI)
705
704
 
@@ -8,14 +8,13 @@ dynamic = ["version"]
8
8
  description = "Human-oriented CLI for interacting with CFEngine tools"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
11
- requires-python = ">=3.9"
11
+ requires-python = ">=3.10"
12
12
  dependencies = [
13
13
  "cf-remote>=0.6.4",
14
14
  "cfbs>=4.4.3",
15
- "tree-sitter-cfengine>=1.0.8",
16
- "tree-sitter>=0.23",
15
+ "tree-sitter-cfengine>=1.0.11",
16
+ "tree-sitter>=0.25",
17
17
  "markdown-it-py>=3.0.0",
18
- "black>=25.1.0",
19
18
  ]
20
19
  classifiers = [
21
20
  "Development Status :: 3 - Alpha",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: Human-oriented CLI for interacting with CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -692,14 +692,13 @@ Classifier: Programming Language :: Python :: 3.11
692
692
  Classifier: Programming Language :: Python :: 3.12
693
693
  Classifier: Programming Language :: Python :: 3.13
694
694
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
695
- Requires-Python: >=3.9
695
+ Requires-Python: >=3.10
696
696
  Description-Content-Type: text/markdown
697
697
  Requires-Dist: cf-remote>=0.6.4
698
698
  Requires-Dist: cfbs>=4.4.3
699
- Requires-Dist: tree-sitter-cfengine>=1.0.8
700
- Requires-Dist: tree-sitter>=0.23
699
+ Requires-Dist: tree-sitter-cfengine>=1.0.11
700
+ Requires-Dist: tree-sitter>=0.25
701
701
  Requires-Dist: markdown-it-py>=3.0.0
702
- Requires-Dist: black>=25.1.0
703
702
 
704
703
  # CFEngine command line interface (CLI)
705
704
 
@@ -48,4 +48,5 @@ tests/format/003_wrapping.input.cf
48
48
  tests/format/004_comments.expected.cf
49
49
  tests/format/004_comments.input.cf
50
50
  tests/shell/001-help.sh
51
- tests/shell/002-version.sh
51
+ tests/shell/002-version.sh
52
+ tests/shell/003-format.sh
@@ -0,0 +1,5 @@
1
+ cf-remote>=0.6.4
2
+ cfbs>=4.4.3
3
+ tree-sitter-cfengine>=1.0.11
4
+ tree-sitter>=0.25
5
+ markdown-it-py>=3.0.0
@@ -47,46 +47,46 @@ def deploy() -> int:
47
47
  return r
48
48
 
49
49
 
50
- def _format_filename(filename):
50
+ def _format_filename(filename, line_length):
51
51
  if filename.startswith("./."):
52
52
  return
53
53
  if filename.endswith(".json"):
54
54
  format_json_file(filename)
55
55
  return
56
56
  if filename.endswith(".cf"):
57
- format_policy_file(filename)
57
+ format_policy_file(filename, line_length)
58
58
  return
59
59
  raise UserError(f"Unrecognized file format: {filename}")
60
60
 
61
61
 
62
- def _format_dirname(directory):
62
+ def _format_dirname(directory, line_length):
63
63
  for filename in find(directory, extension=".json"):
64
- _format_filename(filename)
64
+ _format_filename(filename, line_length)
65
65
  for filename in find(directory, extension=".cf"):
66
- _format_filename(filename)
66
+ _format_filename(filename, line_length)
67
67
 
68
68
 
69
- def format(args) -> int:
70
- if not args:
71
- _format_dirname(".")
69
+ def format(names, line_length) -> int:
70
+ if not names:
71
+ _format_dirname(".", line_length)
72
72
  return 0
73
- if len(args) == 1 and args[0] == "-":
73
+ if len(names) == 1 and names[0] == "-":
74
74
  # Special case, format policy file from stdin to stdout
75
- format_policy_fin_fout(sys.stdin, sys.stdout)
75
+ format_policy_fin_fout(sys.stdin, sys.stdout, line_length)
76
76
  return 0
77
77
 
78
- for arg in args:
79
- if arg == "-":
78
+ for name in names:
79
+ if name == "-":
80
80
  raise UserError(
81
81
  "The - argument has a special meaning and cannot be combined with other paths"
82
82
  )
83
- if not os.path.exists(arg):
84
- raise UserError(f"{arg} does not exist")
85
- if os.path.isfile(arg):
86
- _format_filename(arg)
83
+ if not os.path.exists(name):
84
+ raise UserError(f"{name} does not exist")
85
+ if os.path.isfile(name):
86
+ _format_filename(name, line_length)
87
87
  continue
88
- if os.path.isdir(arg):
89
- _format_dirname(arg)
88
+ if os.path.isdir(name):
89
+ _format_dirname(name, line_length)
90
90
  continue
91
91
  return 0
92
92
 
@@ -10,12 +10,12 @@ TODO: This code needs several adjustments to better fit into
10
10
 
11
11
  import os
12
12
  import json
13
- from shutil import which
14
13
  import subprocess
15
14
 
16
15
  import markdown_it
17
16
  from cfbs.pretty import pretty_file
18
17
 
18
+ from cfengine_cli.lint import lint_policy_file
19
19
  from cfengine_cli.utils import UserError
20
20
 
21
21
 
@@ -109,7 +109,9 @@ def fn_extract(origin_path, snippet_path, _language, first_line, last_line):
109
109
  raise UserError(f"Couldn't open '{origin_path}' or '{snippet_path}'")
110
110
 
111
111
 
112
- def fn_check_syntax(origin_path, snippet_path, language, first_line, _last_line):
112
+ def fn_check_syntax(
113
+ origin_path, snippet_path, language, first_line, _last_line, snippet_number
114
+ ):
113
115
  snippet_abs_path = os.path.abspath(snippet_path)
114
116
 
115
117
  if not os.path.exists(snippet_path):
@@ -119,25 +121,11 @@ def fn_check_syntax(origin_path, snippet_path, language, first_line, _last_line)
119
121
 
120
122
  match language:
121
123
  case "cf":
122
- try:
123
- p = subprocess.run(
124
- ["/var/cfengine/bin/cf-promises", snippet_abs_path],
125
- capture_output=True,
126
- text=True,
127
- )
128
- err = p.stderr
129
-
130
- if err:
131
- err = err.replace(snippet_abs_path, f"{origin_path}:{first_line}")
132
- print(err)
133
- except OSError:
134
- raise UserError(f"'{snippet_abs_path}' doesn't exist")
135
- except ValueError:
136
- raise UserError("Invalid subprocess arguments")
137
- except subprocess.CalledProcessError:
138
- raise UserError(f"Couldn't run cf-promises on '{snippet_abs_path}'")
139
- except subprocess.TimeoutExpired:
140
- raise UserError("Timed out")
124
+ r = lint_policy_file(
125
+ snippet_abs_path, origin_path, first_line + 1, snippet_number
126
+ )
127
+ if r != 0:
128
+ raise UserError(f"Error when checking '{origin_path}'")
141
129
  case "json":
142
130
  try:
143
131
  with open(snippet_abs_path, "r") as f:
@@ -199,25 +187,35 @@ def fn_autoformat(_origin_path, snippet_path, language, _first_line, _last_line)
199
187
  raise UserError(f"Invalid json in '{snippet_path}'")
200
188
 
201
189
 
202
- def _markdown_code_checker(
203
- path, syntax_check, extract, replace, autoformat, languages, output_check, cleanup
204
- ):
205
- supported_languages = {"cf3": "cf", "json": "json", "yaml": "yml"}
190
+ def _translate_language(x):
191
+ if x == "cf3" or x == "cfengine3":
192
+ return "cf"
193
+ if x == "yaml":
194
+ return "yml"
195
+ return x
206
196
 
197
+
198
+ SUPPORTED_LANGUAGES = ["cf", "cfengine3", "cf3", "json", "yml", "yaml"]
199
+
200
+
201
+ def _process_markdown_code_blocks(
202
+ path, languages, extract, syntax_check, output_check, autoformat, replace, cleanup
203
+ ):
207
204
  if not os.path.exists(path):
208
205
  raise UserError("This path doesn't exist")
209
206
 
210
- if (
211
- syntax_check
212
- and "cf3" in languages
213
- and not which("/var/cfengine/bin/cf-promises")
214
- ):
215
- raise UserError("cf-promises is not installed")
216
-
207
+ languages = set(languages)
208
+ if "cf3" in languages or "cf" in languages or "cfengine3" in languages:
209
+ languages.add("cf3")
210
+ languages.add("cfengine3")
211
+ languages.add("cf")
212
+ if "yaml" in languages or "yml" in languages:
213
+ languages.add("yml")
214
+ languages.add("yaml")
217
215
  for language in languages:
218
- if language not in supported_languages:
216
+ if language not in SUPPORTED_LANGUAGES:
219
217
  raise UserError(
220
- f"Unsupported language '{language}'. The supported languages are: {", ".join(supported_languages.keys())}"
218
+ f"Unsupported language '{language}'. The supported languages are: {", ".join(SUPPORTED_LANGUAGES)}"
221
219
  )
222
220
 
223
221
  parsed_markdowns = get_markdown_files(path, languages)
@@ -233,8 +231,9 @@ def _markdown_code_checker(
233
231
  cb["first_line"] += offset
234
232
  cb["last_line"] += offset
235
233
 
236
- language = supported_languages[code_block["language"]]
237
- snippet_path = f"{origin_path}.snippet-{i + 1}.{language}"
234
+ language = _translate_language(code_block["language"])
235
+ snippet_number = i + 1
236
+ snippet_path = f"{origin_path}.snippet-{snippet_number}.{language}"
238
237
 
239
238
  flags = code_block["flags"]
240
239
  if "noextract" in flags or "skip" in flags:
@@ -257,12 +256,16 @@ def _markdown_code_checker(
257
256
  language,
258
257
  code_block["first_line"],
259
258
  code_block["last_line"],
259
+ snippet_number,
260
260
  )
261
261
  except Exception as e:
262
262
  if cleanup:
263
263
  os.remove(snippet_path)
264
264
  raise e
265
265
 
266
+ if output_check and "noexecute" not in code_block["flags"]:
267
+ fn_check_output()
268
+
266
269
  if autoformat and "noautoformat" not in code_block["flags"]:
267
270
  fn_autoformat(
268
271
  origin_path,
@@ -272,9 +275,6 @@ def _markdown_code_checker(
272
275
  code_block["last_line"],
273
276
  )
274
277
 
275
- if output_check and "noexecute" not in code_block["flags"]:
276
- fn_check_output()
277
-
278
278
  if replace and "noreplace" not in code_block["flags"]:
279
279
  offset = fn_replace(
280
280
  origin_path,
@@ -287,6 +287,7 @@ def _markdown_code_checker(
287
287
  if cleanup:
288
288
  os.remove(snippet_path)
289
289
 
290
+
290
291
  def _run_black():
291
292
  path = "."
292
293
  assert os.path.isdir(path)
@@ -299,7 +300,9 @@ def _run_black():
299
300
  cwd=path,
300
301
  )
301
302
  except:
302
- raise UserError("Encountered an error running prettier")
303
+ raise UserError(
304
+ "Encountered an error running black\nInstall: pipx install black"
305
+ )
303
306
 
304
307
 
305
308
  def _run_prettier():
@@ -314,7 +317,10 @@ def _run_prettier():
314
317
  cwd=path,
315
318
  )
316
319
  except:
317
- raise UserError("Encountered an error running prettier")
320
+ raise UserError(
321
+ "Encountered an error running prettier\nInstall: npm install --global prettier"
322
+ )
323
+
318
324
 
319
325
  def update_docs() -> int:
320
326
  """
@@ -327,16 +333,19 @@ def update_docs() -> int:
327
333
  Run by the command:
328
334
  cfengine dev docs-format
329
335
  """
336
+ print("Formatting python files with black...")
330
337
  _run_black()
338
+ print("Formatting markdown files with prettier...")
331
339
  _run_prettier()
332
- _markdown_code_checker(
340
+ print("Formatting markdown code blocks according to our rules...")
341
+ _process_markdown_code_blocks(
333
342
  path=".",
334
- syntax_check=False,
343
+ languages=["json"], # TODO: Add cfengine3 here
335
344
  extract=True,
336
- replace=True,
337
- autoformat=True,
338
- languages=["json"],
345
+ syntax_check=False,
339
346
  output_check=False,
347
+ autoformat=True,
348
+ replace=True,
340
349
  cleanup=True,
341
350
  )
342
351
  return 0
@@ -348,15 +357,15 @@ def check_docs() -> int:
348
357
  Currently only JSON syntax checking.
349
358
 
350
359
  Run by the command:
351
- cfengine dev docs-checking"""
352
- _markdown_code_checker(
360
+ cfengine dev docs-check"""
361
+ _process_markdown_code_blocks(
353
362
  path=".",
354
- syntax_check=True,
363
+ languages=["json", "cf3"],
355
364
  extract=True,
356
- replace=False,
357
- autoformat=False,
358
- languages=["json"],
365
+ syntax_check=True,
359
366
  output_check=False,
367
+ autoformat=False,
368
+ replace=False,
360
369
  cleanup=True,
361
370
  )
362
371
  return 0
@@ -80,14 +80,14 @@ def split_generic_value(node, indent):
80
80
  return [stringify_single_line(node)]
81
81
 
82
82
 
83
- def split_generic_list(middle, indent):
83
+ def split_generic_list(middle, indent, line_length):
84
84
  elements = []
85
85
  for element in middle:
86
86
  if elements and element.type == ",":
87
87
  elements[-1] = elements[-1] + ","
88
88
  continue
89
89
  line = " " * indent + stringify_single_line(element)
90
- if len(line) < 80:
90
+ if len(line) < line_length:
91
91
  elements.append(line)
92
92
  else:
93
93
  lines = split_generic_value(element, indent)
@@ -96,50 +96,50 @@ def split_generic_list(middle, indent):
96
96
  return elements
97
97
 
98
98
 
99
- def maybe_split_generic_list(nodes, indent):
99
+ def maybe_split_generic_list(nodes, indent, line_length):
100
100
  string = " " * indent + stringify_children(nodes)
101
- if len(string) < 80:
101
+ if len(string) < line_length:
102
102
  return [string]
103
- return split_generic_list(nodes, indent)
103
+ return split_generic_list(nodes, indent, line_length)
104
104
 
105
105
 
106
- def split_rval_list(node, indent):
106
+ def split_rval_list(node, indent, line_length):
107
107
  assert node.type == "list"
108
108
  assert node.children[0].type == "{"
109
109
  first = text(node.children[0])
110
110
  last = " " * indent + text(node.children[-1])
111
111
  middle = node.children[1:-1]
112
- elements = maybe_split_generic_list(middle, indent + 2)
112
+ elements = maybe_split_generic_list(middle, indent + 2, line_length)
113
113
  return [first, *elements, last]
114
114
 
115
115
 
116
- def split_rval_call(node, indent):
116
+ def split_rval_call(node, indent, line_length):
117
117
  assert node.type == "call"
118
118
  assert node.children[0].type == "calling_identifier"
119
119
  assert node.children[1].type == "("
120
120
  first = text(node.children[0]) + "("
121
121
  last = " " * indent + text(node.children[-1])
122
122
  middle = node.children[2:-1]
123
- elements = maybe_split_generic_list(middle, indent + 2)
123
+ elements = maybe_split_generic_list(middle, indent + 2, line_length)
124
124
  return [first, *elements, last]
125
125
 
126
126
 
127
- def split_rval(node, indent):
127
+ def split_rval(node, indent, line_length):
128
128
  if node.type == "list":
129
- return split_rval_list(node, indent)
129
+ return split_rval_list(node, indent, line_length)
130
130
  if node.type == "call":
131
- return split_rval_call(node, indent)
131
+ return split_rval_call(node, indent, line_length)
132
132
  return [stringify_single_line(node)]
133
133
 
134
134
 
135
- def maybe_split_rval(node, indent, offset):
135
+ def maybe_split_rval(node, indent, offset, line_length):
136
136
  line = stringify_single_line(node)
137
- if len(line) + offset < 80:
137
+ if len(line) + offset < line_length:
138
138
  return [line]
139
- return split_rval(node, indent)
139
+ return split_rval(node, indent, line_length)
140
140
 
141
141
 
142
- def attempt_split_attribute(node, indent):
142
+ def attempt_split_attribute(node, indent, line_length):
143
143
  assert len(node.children) == 3
144
144
  lval = node.children[0]
145
145
  arrow = node.children[1]
@@ -148,22 +148,22 @@ def attempt_split_attribute(node, indent):
148
148
  if rval.type == "list" or rval.type == "call":
149
149
  prefix = " " * indent + text(lval) + " " + text(arrow) + " "
150
150
  offset = len(prefix)
151
- lines = maybe_split_rval(rval, indent, offset)
151
+ lines = maybe_split_rval(rval, indent, offset, line_length)
152
152
  lines[0] = prefix + lines[0]
153
153
  return lines
154
154
  return [stringify_single_line(node)]
155
155
 
156
156
 
157
- def stringify(node, indent):
157
+ def stringify(node, indent, line_length):
158
158
  single_line = " " * indent + stringify_single_line(node)
159
- if len(single_line) < 80:
159
+ if len(single_line) < line_length:
160
160
  return [single_line]
161
161
  if node.type == "attribute":
162
- return attempt_split_attribute(node, indent)
162
+ return attempt_split_attribute(node, indent, line_length)
163
163
  return [single_line]
164
164
 
165
165
 
166
- def autoformat(node, fmt, macro_indent, indent=0):
166
+ def autoformat(node, fmt, line_length, macro_indent, indent=0):
167
167
  previous = fmt.update_previous(node)
168
168
  if previous and previous.type == "macro" and text(previous).startswith("@else"):
169
169
  indent = macro_indent
@@ -190,12 +190,12 @@ def autoformat(node, fmt, macro_indent, indent=0):
190
190
  ]:
191
191
  indent += 2
192
192
  if node.type == "attribute":
193
- lines = stringify(node, indent)
193
+ lines = stringify(node, indent, line_length)
194
194
  fmt.print_lines(lines, indent=0)
195
195
  return
196
196
  if children:
197
197
  for child in children:
198
- autoformat(child, fmt, macro_indent, indent)
198
+ autoformat(child, fmt, line_length, macro_indent, indent)
199
199
  return
200
200
  if node.type in [",", ";"]:
201
201
  fmt.print_same_line(node)
@@ -203,7 +203,7 @@ def autoformat(node, fmt, macro_indent, indent=0):
203
203
  fmt.print(node, indent)
204
204
 
205
205
 
206
- def format_policy_file(filename):
206
+ def format_policy_file(filename, line_length):
207
207
  assert filename.endswith(".cf")
208
208
  PY_LANGUAGE = Language(tscfengine.language())
209
209
  parser = Parser(PY_LANGUAGE)
@@ -216,7 +216,7 @@ def format_policy_file(filename):
216
216
 
217
217
  root_node = tree.root_node
218
218
  assert root_node.type == "source_file"
219
- autoformat(root_node, fmt, macro_indent)
219
+ autoformat(root_node, fmt, line_length, macro_indent)
220
220
 
221
221
  new_data = fmt.buffer + "\n"
222
222
  if new_data != original_data.decode("utf-8"):
@@ -225,7 +225,7 @@ def format_policy_file(filename):
225
225
  print(f"Policy file '{filename}' was reformatted")
226
226
 
227
227
 
228
- def format_policy_fin_fout(fin, fout):
228
+ def format_policy_fin_fout(fin, fout, line_length):
229
229
  PY_LANGUAGE = Language(tscfengine.language())
230
230
  parser = Parser(PY_LANGUAGE)
231
231
 
@@ -236,7 +236,7 @@ def format_policy_fin_fout(fin, fout):
236
236
 
237
237
  root_node = tree.root_node
238
238
  assert root_node.type == "source_file"
239
- autoformat(root_node, fmt, macro_indent)
239
+ autoformat(root_node, fmt, line_length, macro_indent)
240
240
 
241
241
  new_data = fmt.buffer + "\n"
242
242
  fout.write(new_data)
@@ -97,9 +97,22 @@ def _walk(filename, lines, node) -> int:
97
97
  return errors
98
98
 
99
99
 
100
- def lint_policy_file(filename):
100
+ def lint_policy_file(
101
+ filename, original_filename=None, original_line=None, snippet=None
102
+ ):
103
+ assert original_filename is None or type(original_filename) is str
104
+ assert original_line is None or type(original_line) is int
105
+ assert snippet is None or type(snippet) is int
106
+ if (
107
+ original_filename is not None
108
+ or original_line is not None
109
+ or snippet is not None
110
+ ):
111
+ assert original_filename and os.path.isfile(original_filename)
112
+ assert original_line and original_line > 0
113
+ assert snippet and snippet > 0
101
114
  assert os.path.isfile(filename)
102
- assert filename.endswith(".cf")
115
+ assert filename.endswith((".cf", ".cfengine3", ".cf3", ".cf.sub"))
103
116
  PY_LANGUAGE = Language(tscfengine.language())
104
117
  parser = Parser(PY_LANGUAGE)
105
118
 
@@ -112,12 +125,26 @@ def lint_policy_file(filename):
112
125
  assert root_node.type == "source_file"
113
126
  errors = 0
114
127
  if not root_node.children:
115
- print(f"Error: Empty policy file '{filename}'")
128
+ if snippet:
129
+ assert original_filename and original_line
130
+ print(
131
+ f"Error: Empty policy snippet {snippet} at '{original_filename}:{original_line}'"
132
+ )
133
+ else:
134
+ print(f"Error: Empty policy file '{filename}'")
116
135
  errors += 1
117
136
  errors += _walk(filename, lines, root_node)
118
137
  if errors == 0:
119
- print(f"PASS: {filename}")
138
+ if snippet:
139
+ assert original_filename and original_line
140
+ print(f"PASS: Snippet {snippet} at '{original_filename}:{original_line}'")
141
+ else:
142
+ print(f"PASS: {filename}")
120
143
  return 0
121
144
 
122
- print(f"FAIL: {filename} ({errors} error{'s' if errors > 0 else ''})")
145
+ if snippet:
146
+ assert original_filename and original_line
147
+ print(f"FAIL: Snippet {snippet} at '{original_filename}:{original_line}'")
148
+ else:
149
+ print(f"FAIL: {filename} ({errors} error{'s' if errors > 0 else ''})")
123
150
  return errors
@@ -43,6 +43,7 @@ def _get_arg_parser():
43
43
  subp.add_parser("deploy", help="Deploy a built policy set")
44
44
  fmt = subp.add_parser("format", help="Autoformat .json and .cf files")
45
45
  fmt.add_argument("files", nargs="*", help="Files to format")
46
+ fmt.add_argument("--line-length", default=80, type=int, help="Maximum line length")
46
47
  subp.add_parser(
47
48
  "lint",
48
49
  help="Look for syntax errors and other simple mistakes",
@@ -86,7 +87,7 @@ def run_command_with_args(args) -> int:
86
87
  if args.command == "deploy":
87
88
  return commands.deploy()
88
89
  if args.command == "format":
89
- return commands.format(args.files)
90
+ return commands.format(args.files, args.line_length)
90
91
  if args.command == "lint":
91
92
  return commands.lint()
92
93
  if args.command == "report":
@@ -0,0 +1,37 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+ set -x
5
+
6
+ # Verify that the line length parameter shows up in help
7
+ cfengine format -h | grep -- "--line-length"
8
+
9
+ # Test three common line length
10
+ for ll in 80 100 120; do
11
+ # Format the following HEREDOC and let wc count the longest line
12
+ l=$(cfengine format --line-length $ll - <<-EOF |
13
+ bundle agent slists
14
+ {
15
+ vars:
16
+ "variable_name"
17
+ slist => { "one", "two", "three", "four", "five", "six" };
18
+ "variable_name"
19
+ slist => { "one", "two", "three", "four", "five", "six", "seven" };
20
+ "variable_name"
21
+ slist => {
22
+ "one", "two", "three", "four", "five", "six", "seven", "eight"
23
+ };
24
+ "variable_name"
25
+ slist => {
26
+ "one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen",
27
+ };
28
+ "variable_name"
29
+ slist => {
30
+ "one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen"
31
+ };
32
+ }
33
+ EOF
34
+ wc -L)
35
+ # Verify that the actual longest line has less or equal characters
36
+ [[ $l -le $ll ]]
37
+ done
@@ -1,10 +1,6 @@
1
1
  version = 1
2
2
  revision = 1
3
- requires-python = ">=3.9"
4
- resolution-markers = [
5
- "python_full_version >= '3.10'",
6
- "python_full_version < '3.10'",
7
- ]
3
+ requires-python = ">=3.10"
8
4
 
9
5
  [[package]]
10
6
  name = "apache-libcloud"
@@ -18,45 +14,6 @@ wheels = [
18
14
  { url = "https://files.pythonhosted.org/packages/45/fe/f450315f92d9f089fa25d8acbdd056bb780c83ffa0e275b519a04954bff1/apache_libcloud-3.8.0-py2.py3-none-any.whl", hash = "sha256:de65a8bd946f6532830f20a83f2eae2fa056f05a674fad30afe877cb78df6050", size = 3659280 },
19
15
  ]
20
16
 
21
- [[package]]
22
- name = "black"
23
- version = "25.1.0"
24
- source = { registry = "https://pypi.org/simple" }
25
- dependencies = [
26
- { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
27
- { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
28
- { name = "mypy-extensions" },
29
- { name = "packaging" },
30
- { name = "pathspec" },
31
- { name = "platformdirs" },
32
- { name = "tomli", marker = "python_full_version < '3.11'" },
33
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
34
- ]
35
- sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449 }
36
- wheels = [
37
- { url = "https://files.pythonhosted.org/packages/4d/3b/4ba3f93ac8d90410423fdd31d7541ada9bcee1df32fb90d26de41ed40e1d/black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32", size = 1629419 },
38
- { url = "https://files.pythonhosted.org/packages/b4/02/0bde0485146a8a5e694daed47561785e8b77a0466ccc1f3e485d5ef2925e/black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da", size = 1461080 },
39
- { url = "https://files.pythonhosted.org/packages/52/0e/abdf75183c830eaca7589144ff96d49bce73d7ec6ad12ef62185cc0f79a2/black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7", size = 1766886 },
40
- { url = "https://files.pythonhosted.org/packages/dc/a6/97d8bb65b1d8a41f8a6736222ba0a334db7b7b77b8023ab4568288f23973/black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9", size = 1419404 },
41
- { url = "https://files.pythonhosted.org/packages/7e/4f/87f596aca05c3ce5b94b8663dbfe242a12843caaa82dd3f85f1ffdc3f177/black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0", size = 1614372 },
42
- { url = "https://files.pythonhosted.org/packages/e7/d0/2c34c36190b741c59c901e56ab7f6e54dad8df05a6272a9747ecef7c6036/black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299", size = 1442865 },
43
- { url = "https://files.pythonhosted.org/packages/21/d4/7518c72262468430ead45cf22bd86c883a6448b9eb43672765d69a8f1248/black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096", size = 1749699 },
44
- { url = "https://files.pythonhosted.org/packages/58/db/4f5beb989b547f79096e035c4981ceb36ac2b552d0ac5f2620e941501c99/black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2", size = 1428028 },
45
- { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988 },
46
- { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985 },
47
- { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816 },
48
- { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860 },
49
- { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673 },
50
- { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190 },
51
- { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926 },
52
- { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613 },
53
- { url = "https://files.pythonhosted.org/packages/d3/b6/ae7507470a4830dbbfe875c701e84a4a5fb9183d1497834871a715716a92/black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0", size = 1628593 },
54
- { url = "https://files.pythonhosted.org/packages/24/c1/ae36fa59a59f9363017ed397750a0cd79a470490860bc7713967d89cdd31/black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f", size = 1460000 },
55
- { url = "https://files.pythonhosted.org/packages/ac/b6/98f832e7a6c49aa3a464760c67c7856363aa644f2f3c74cf7d624168607e/black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e", size = 1765963 },
56
- { url = "https://files.pythonhosted.org/packages/ce/e9/2cb0a017eb7024f70e0d2e9bdb8c5a5b078c5740c7f8816065d06f04c557/black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355", size = 1419419 },
57
- { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646 },
58
- ]
59
-
60
17
  [[package]]
61
18
  name = "certifi"
62
19
  version = "2025.1.31"
@@ -91,12 +48,10 @@ wheels = [
91
48
  name = "cfengine"
92
49
  source = { editable = "." }
93
50
  dependencies = [
94
- { name = "black" },
95
51
  { name = "cf-remote" },
96
52
  { name = "cfbs" },
97
53
  { name = "markdown-it-py" },
98
- { name = "tree-sitter", version = "0.23.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
99
- { name = "tree-sitter", version = "0.24.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
54
+ { name = "tree-sitter" },
100
55
  { name = "tree-sitter-cfengine" },
101
56
  ]
102
57
 
@@ -108,12 +63,11 @@ dev = [
108
63
 
109
64
  [package.metadata]
110
65
  requires-dist = [
111
- { name = "black", specifier = ">=25.1.0" },
112
66
  { name = "cf-remote", specifier = ">=0.6.4" },
113
67
  { name = "cfbs", specifier = ">=4.4.3" },
114
68
  { name = "markdown-it-py", specifier = ">=3.0.0" },
115
- { name = "tree-sitter", specifier = ">=0.23" },
116
- { name = "tree-sitter-cfengine", specifier = ">=1.0.8" },
69
+ { name = "tree-sitter", specifier = ">=0.25" },
70
+ { name = "tree-sitter-cfengine", specifier = ">=1.0.11" },
117
71
  ]
118
72
 
119
73
  [package.metadata.requires-dev]
@@ -180,52 +134,9 @@ wheels = [
180
134
  { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 },
181
135
  { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 },
182
136
  { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 },
183
- { url = "https://files.pythonhosted.org/packages/7f/c0/b913f8f02836ed9ab32ea643c6fe4d3325c3d8627cf6e78098671cafff86/charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", size = 197867 },
184
- { url = "https://files.pythonhosted.org/packages/0f/6c/2bee440303d705b6fb1e2ec789543edec83d32d258299b16eed28aad48e0/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", size = 141385 },
185
- { url = "https://files.pythonhosted.org/packages/3d/04/cb42585f07f6f9fd3219ffb6f37d5a39b4fd2db2355b23683060029c35f7/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", size = 151367 },
186
- { url = "https://files.pythonhosted.org/packages/54/54/2412a5b093acb17f0222de007cc129ec0e0df198b5ad2ce5699355269dfe/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", size = 143928 },
187
- { url = "https://files.pythonhosted.org/packages/5a/6d/e2773862b043dcf8a221342954f375392bb2ce6487bcd9f2c1b34e1d6781/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", size = 146203 },
188
- { url = "https://files.pythonhosted.org/packages/b9/f8/ca440ef60d8f8916022859885f231abb07ada3c347c03d63f283bec32ef5/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", size = 148082 },
189
- { url = "https://files.pythonhosted.org/packages/04/d2/42fd330901aaa4b805a1097856c2edf5095e260a597f65def493f4b8c833/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", size = 142053 },
190
- { url = "https://files.pythonhosted.org/packages/9e/af/3a97a4fa3c53586f1910dadfc916e9c4f35eeada36de4108f5096cb7215f/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", size = 150625 },
191
- { url = "https://files.pythonhosted.org/packages/26/ae/23d6041322a3556e4da139663d02fb1b3c59a23ab2e2b56432bd2ad63ded/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", size = 153549 },
192
- { url = "https://files.pythonhosted.org/packages/94/22/b8f2081c6a77cb20d97e57e0b385b481887aa08019d2459dc2858ed64871/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", size = 150945 },
193
- { url = "https://files.pythonhosted.org/packages/c7/0b/c5ec5092747f801b8b093cdf5610e732b809d6cb11f4c51e35fc28d1d389/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", size = 146595 },
194
- { url = "https://files.pythonhosted.org/packages/0c/5a/0b59704c38470df6768aa154cc87b1ac7c9bb687990a1559dc8765e8627e/charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", size = 95453 },
195
- { url = "https://files.pythonhosted.org/packages/85/2d/a9790237cb4d01a6d57afadc8573c8b73c609ade20b80f4cda30802009ee/charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", size = 102811 },
196
137
  { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 },
197
138
  ]
198
139
 
199
- [[package]]
200
- name = "click"
201
- version = "8.1.8"
202
- source = { registry = "https://pypi.org/simple" }
203
- resolution-markers = [
204
- "python_full_version < '3.10'",
205
- ]
206
- dependencies = [
207
- { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" },
208
- ]
209
- sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
210
- wheels = [
211
- { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
212
- ]
213
-
214
- [[package]]
215
- name = "click"
216
- version = "8.2.1"
217
- source = { registry = "https://pypi.org/simple" }
218
- resolution-markers = [
219
- "python_full_version >= '3.10'",
220
- ]
221
- dependencies = [
222
- { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" },
223
- ]
224
- sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 }
225
- wheels = [
226
- { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 },
227
- ]
228
-
229
140
  [[package]]
230
141
  name = "colorama"
231
142
  version = "0.4.6"
@@ -306,15 +217,6 @@ wheels = [
306
217
  { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
307
218
  ]
308
219
 
309
- [[package]]
310
- name = "mypy-extensions"
311
- version = "1.1.0"
312
- source = { registry = "https://pypi.org/simple" }
313
- sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 }
314
- wheels = [
315
- { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 },
316
- ]
317
-
318
220
  [[package]]
319
221
  name = "packaging"
320
222
  version = "24.2"
@@ -324,24 +226,6 @@ wheels = [
324
226
  { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
325
227
  ]
326
228
 
327
- [[package]]
328
- name = "pathspec"
329
- version = "0.12.1"
330
- source = { registry = "https://pypi.org/simple" }
331
- sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 }
332
- wheels = [
333
- { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 },
334
- ]
335
-
336
- [[package]]
337
- name = "platformdirs"
338
- version = "4.3.8"
339
- source = { registry = "https://pypi.org/simple" }
340
- sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 }
341
- wheels = [
342
- { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 },
343
- ]
344
-
345
229
  [[package]]
346
230
  name = "pluggy"
347
231
  version = "1.5.0"
@@ -442,116 +326,53 @@ wheels = [
442
326
 
443
327
  [[package]]
444
328
  name = "tree-sitter"
445
- version = "0.23.2"
329
+ version = "0.25.0"
446
330
  source = { registry = "https://pypi.org/simple" }
447
- resolution-markers = [
448
- "python_full_version < '3.10'",
449
- ]
450
- sdist = { url = "https://files.pythonhosted.org/packages/0f/50/fd5fafa42b884f741b28d9e6fd366c3f34e15d2ed3aa9633b34e388379e2/tree-sitter-0.23.2.tar.gz", hash = "sha256:66bae8dd47f1fed7bdef816115146d3a41c39b5c482d7bad36d9ba1def088450", size = 166800 }
331
+ sdist = { url = "https://files.pythonhosted.org/packages/98/21/e952c3180f0fd83d09cee9e0bc29f67827c659cee45077ae06eb7d813cfc/tree-sitter-0.25.0.tar.gz", hash = "sha256:15c88775cf24db06677bafe62df058a6457d8a6dde67baa48dd3723b905e79a6", size = 177740 }
451
332
  wheels = [
452
- { url = "https://files.pythonhosted.org/packages/91/04/2068a7b725265ecfcbf63ecdae038f1d4124ebccd55b8a7ce145b70e2b6a/tree_sitter-0.23.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3a937f5d8727bc1c74c4bf2a9d1c25ace049e8628273016ad0d45914ae904e10", size = 139289 },
453
- { url = "https://files.pythonhosted.org/packages/a8/07/a5b943121f674fe1ac77694a698e71ce95353830c1f3f4ce45da7ef3e406/tree_sitter-0.23.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2c7eae7fe2af215645a38660d2d57d257a4c461fe3ec827cca99a79478284e80", size = 132379 },
454
- { url = "https://files.pythonhosted.org/packages/d4/96/fcc72c33d464a2d722db1e95b74a53ced771a47b3cfde60aced29764a783/tree_sitter-0.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a71d607595270b6870eaf778a1032d146b2aa79bfcfa60f57a82a7b7584a4c7", size = 552884 },
455
- { url = "https://files.pythonhosted.org/packages/d0/af/b0e787a52767155b4643a55d6de03c1e4ae77abb61e1dc1629ad983e0a40/tree_sitter-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe9b9ea7a0aa23b52fd97354da95d1b2580065bc12a4ac868f9164a127211d6", size = 566561 },
456
- { url = "https://files.pythonhosted.org/packages/65/fd/05e966b5317b1c6679c071c5b0203f28af9d26c9363700cb9682e1bcf343/tree_sitter-0.23.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d74d00a8021719eae14d10d1b1e28649e15d8b958c01c2b2c3dad7a2ebc4dbae", size = 558273 },
457
- { url = "https://files.pythonhosted.org/packages/60/bc/19145efdf3f47711aa3f1bf06f0b50593f97f1108550d38694841fd97b7c/tree_sitter-0.23.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6de18d8d8a7f67ab71f472d1fcb01cc506e080cbb5e13d52929e4b6fdce6bbee", size = 569176 },
458
- { url = "https://files.pythonhosted.org/packages/32/08/3553d8e488ae9284a0762effafb7d2639a306e184963b7f99853923084d6/tree_sitter-0.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:12b60dca70d2282af942b650a6d781be487485454668c7c956338a367b98cdee", size = 117902 },
459
- { url = "https://files.pythonhosted.org/packages/1d/39/836fa485e985c33e8aa1cc3abbf7a84be1c2c382e69547a765631fdd7ce3/tree_sitter-0.23.2-cp310-cp310-win_arm64.whl", hash = "sha256:3346a4dd0447a42aabb863443b0fd8c92b909baf40ed2344fae4b94b625d5955", size = 102644 },
460
- { url = "https://files.pythonhosted.org/packages/55/8d/2d4fb04408772be0919441d66f700673ce7cb76b9ab6682e226d740fb88d/tree_sitter-0.23.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91fda41d4f8824335cc43c64e2c37d8089c8c563bd3900a512d2852d075af719", size = 139142 },
461
- { url = "https://files.pythonhosted.org/packages/32/52/b8a44bfff7b0203256e5dbc8d3a372ee8896128b8ed7d3a89e1ef17b2065/tree_sitter-0.23.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:92b2b489d5ce54b41f94c6f23fbaf592bd6e84dc2877048fd1cb060480fa53f7", size = 132198 },
462
- { url = "https://files.pythonhosted.org/packages/5d/54/746f2ee5acf6191a4a0be7f5843329f0d713bfe5196f5fc6fe2ea69cb44c/tree_sitter-0.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64859bd4aa1567d0d6016a811b2b49c59d4a4427d096e3d8c84b2521455f62b7", size = 554303 },
463
- { url = "https://files.pythonhosted.org/packages/2f/5a/3169d9933be813776a9b4b3f2e671d3d50fa27e589dee5578f6ecef7ff6d/tree_sitter-0.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:614590611636044e071d3a0b748046d52676dbda3bc9fa431216231e11dd98f7", size = 567626 },
464
- { url = "https://files.pythonhosted.org/packages/32/0d/23f363b3b0bc3fa0e7a4a294bf119957ac1ab02737d57815e1e8b7b3e196/tree_sitter-0.23.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08466953c78ae57be61057188fb88c89791b0a562856010228e0ccf60e2ac453", size = 559803 },
465
- { url = "https://files.pythonhosted.org/packages/6f/b3/1ffba0f17a7ff2c9114d91a1ecc15e0748f217817797564d31fbb61d7458/tree_sitter-0.23.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8a33f03a562de91f7fd05eefcedd8994a06cd44c62f7aabace811ad82bc11cbd", size = 570987 },
466
- { url = "https://files.pythonhosted.org/packages/59/4b/085bcb8a11ea18003aacc4dbc91c301d1536c5e2deedb95393e8ef26f1f7/tree_sitter-0.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:03b70296b569ef64f7b92b42ca5da9bf86d81bee2afd480bea35092687f51dae", size = 117771 },
467
- { url = "https://files.pythonhosted.org/packages/4b/e5/90adc4081f49ccb6bea89a800dc9b0dcc5b6953b0da423e8eff28f63fddf/tree_sitter-0.23.2-cp311-cp311-win_arm64.whl", hash = "sha256:7cb4bb953ea7c0b50eeafc4454783e030357179d2a93c3dd5ebed2da5588ddd0", size = 102555 },
468
- { url = "https://files.pythonhosted.org/packages/07/a7/57e0fe87b49a78c670a7b4483f70e44c000c65c29b138001096b22e7dd87/tree_sitter-0.23.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a014498b6a9e6003fae8c6eb72f5927d62da9dcb72b28b3ce8cd15c6ff6a6572", size = 139259 },
469
- { url = "https://files.pythonhosted.org/packages/b4/b9/bc8513d818ffb54993a017a36c8739300bc5739a13677acf90b54995e7db/tree_sitter-0.23.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f8699b131d4bcbe3805c37e4ef3d159ee9a82a0e700587625623999ba0ea53", size = 131951 },
470
- { url = "https://files.pythonhosted.org/packages/d7/6a/eab01bb6b1ce3c9acf16d72922ffc29a904af485eb3e60baf3a3e04edd30/tree_sitter-0.23.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4471577df285059c71686ecb208bc50fb472099b38dcc8e849b0e86652891e87", size = 557952 },
471
- { url = "https://files.pythonhosted.org/packages/bd/95/f2f73332623cf63200d57800f85273170bc5f99d28ea3f234afd5b0048df/tree_sitter-0.23.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f342c925290dd4e20ecd5787ef7ae8749981597ab364783a1eb73173efe65226", size = 571199 },
472
- { url = "https://files.pythonhosted.org/packages/04/ac/bd6e6cfdd0421156e86f5c93848629af1c7323083077e1a95b27d32d5811/tree_sitter-0.23.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a4e9e53d07dd076bede72e4f7d3a0173d7b9ad6576572dd86da008a740a9bb22", size = 562129 },
473
- { url = "https://files.pythonhosted.org/packages/7b/bd/8a9edcbcf8a76b0bf58e3b927ed291e3598e063d56667367762833cc8709/tree_sitter-0.23.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8caebe65bc358759dac2500d8f8feed3aed939c4ade9a684a1783fe07bc7d5db", size = 574307 },
474
- { url = "https://files.pythonhosted.org/packages/0c/c2/3fb2c6c0ae2f59a7411dc6d3e7945e3cb6f34c8552688708acc8b2b13f83/tree_sitter-0.23.2-cp312-cp312-win_amd64.whl", hash = "sha256:fc5a72eb50d43485000dbbb309acb350467b7467e66dc747c6bb82ce63041582", size = 117858 },
475
- { url = "https://files.pythonhosted.org/packages/e2/18/4ca2c0f4a0c802ebcb3a92264cc436f1d54b394fa24dfa76bf57cdeaca9e/tree_sitter-0.23.2-cp312-cp312-win_arm64.whl", hash = "sha256:a0320eb6c7993359c5f7b371d22719ccd273f440d41cf1bd65dac5e9587f2046", size = 102496 },
476
- { url = "https://files.pythonhosted.org/packages/ba/c6/4ead9ce3113a7c27f37a2bdef163c09757efbaa85adbdfe7b3fbf0317c57/tree_sitter-0.23.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eff630dddee7ba05accb439b17e559e15ce13f057297007c246237ceb6306332", size = 139266 },
477
- { url = "https://files.pythonhosted.org/packages/76/c9/b4197c5b0c1d6ba648202a547846ac910a53163b69a459504b2aa6cdb76e/tree_sitter-0.23.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4780ba8f3894f2dea869fad2995c2aceab3fd5ab9e6a27c45475d2acd7f7e84e", size = 131959 },
478
- { url = "https://files.pythonhosted.org/packages/99/94/0f7c5580d2adff3b57d36f1998725b0caf6cf1af50ceafc00c6cdbc2fef6/tree_sitter-0.23.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b609460b8e3e256361fb12e94fae5b728cb835b16f0f9d590b5aadbf9d109b", size = 557582 },
479
- { url = "https://files.pythonhosted.org/packages/97/8a/f73ff06959d43fd47fc283cbcc4d8efa6550b2cc431d852b184504992447/tree_sitter-0.23.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d070d8eaeaeb36cf535f55e5578fddbfc3bf53c1980f58bf1a99d57466b3b5", size = 570891 },
480
- { url = "https://files.pythonhosted.org/packages/b8/86/bbda5ad09b88051ff7bf3275622a2f79bc4f728b4c283ff8b93b8fcdf36d/tree_sitter-0.23.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:878580b2ad5054c410ba3418edca4d34c81cc26706114d8f5b5541688bc2d785", size = 562343 },
481
- { url = "https://files.pythonhosted.org/packages/ca/55/b404fa49cb5c2926ad6fe1cac033dd486ef69f1afeb7828452d21e1e05c1/tree_sitter-0.23.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:29224bdc2a3b9af535b7725e249d3ee291b2e90708e82832e73acc175e40dc48", size = 574407 },
482
- { url = "https://files.pythonhosted.org/packages/c2/c8/eea2104443ab973091107ef3e730683bd8e6cb51dd025cef853d3fff9dae/tree_sitter-0.23.2-cp313-cp313-win_amd64.whl", hash = "sha256:c58d89348162fbc3aea1fe6511a66ee189fc0e4e4bbe937026f29e4ecef17763", size = 117854 },
483
- { url = "https://files.pythonhosted.org/packages/89/4d/1728d9ce32a1d851081911b7e47830f5e740431f2bb920f54bb8c26175bc/tree_sitter-0.23.2-cp313-cp313-win_arm64.whl", hash = "sha256:0ff2037be5edab7801de3f6a721b9cf010853f612e2008ee454e0e0badb225a6", size = 102492 },
484
- { url = "https://files.pythonhosted.org/packages/cb/ab/b39173a47d498cc6276e303c865f4a222134ceae890bd3c1b29427489805/tree_sitter-0.23.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a5db8e585205faef8bf219da77d8993e2ef04d08eda2e3c8ad7e4df8297ee344", size = 139550 },
485
- { url = "https://files.pythonhosted.org/packages/4c/34/fa8f5b862dd7a6014fd5578810178e8f7601830cabb6d65d2aba050c2df1/tree_sitter-0.23.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9dbd110a30cf28be5da734ae4cd0e9031768228dbf6a79f2973962aa51de4ec7", size = 132686 },
486
- { url = "https://files.pythonhosted.org/packages/98/b9/ccdddf35705fc23395caa71557f767e0753d38afe4b5bb99efddbf62bb22/tree_sitter-0.23.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569514b9a996a0fd458b3a891c46ca125298be0c03cf82f2b6f0c13d5d8f25dc", size = 554958 },
487
- { url = "https://files.pythonhosted.org/packages/8d/ba/20ae9079bdfc5cfac28b39d945a6c354c8e1385e73aec8142db6c53b635c/tree_sitter-0.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a357ed98a74e47787b812df99a74a2c35c0fe11e55c2095cc01d1cad144ef552", size = 568162 },
488
- { url = "https://files.pythonhosted.org/packages/40/00/b16bf6cf88c47c1b6c8e1cce1eb9e90badb5db9e5252ae0970d858d02592/tree_sitter-0.23.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c2dfb8e8f760f4cc67888d03ef9e2dbd3353245f67f5efba375c2a14d944ac0e", size = 560278 },
489
- { url = "https://files.pythonhosted.org/packages/7a/8f/27ab9b96cc0261af78b080ec8a9846a38e216360ec38774ea27eba35bd3c/tree_sitter-0.23.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3ead958df87a21d706903987e665e9e0e5df7b2c5021ff69ea349826840adc6a", size = 571255 },
490
- { url = "https://files.pythonhosted.org/packages/44/e0/95a3d66a7e5bb229574484ab10c6dc99d1c7a32972b890d194076e30dc4f/tree_sitter-0.23.2-cp39-cp39-win_amd64.whl", hash = "sha256:611cae16be332213c0e6ece72c0bfca202e30ff320a8b309b1526c6cb79ee4ba", size = 118232 },
491
- { url = "https://files.pythonhosted.org/packages/10/b5/9eaf794fc71490573ab14a366affca415bc1ddbf86a14d78e54583db4254/tree_sitter-0.23.2-cp39-cp39-win_arm64.whl", hash = "sha256:b848e0fdd522fbb8888cdb4f4d93f8fad97ae10d70c122fb922e51363c7febcd", size = 102787 },
492
- ]
493
-
494
- [[package]]
495
- name = "tree-sitter"
496
- version = "0.24.0"
497
- source = { registry = "https://pypi.org/simple" }
498
- resolution-markers = [
499
- "python_full_version >= '3.10'",
500
- ]
501
- sdist = { url = "https://files.pythonhosted.org/packages/a7/a2/698b9d31d08ad5558f8bfbfe3a0781bd4b1f284e89bde3ad18e05101a892/tree-sitter-0.24.0.tar.gz", hash = "sha256:abd95af65ca2f4f7eca356343391ed669e764f37748b5352946f00f7fc78e734", size = 168304 }
502
- wheels = [
503
- { url = "https://files.pythonhosted.org/packages/08/9a/bd627a02e41671af73222316e1fcf87772c7804dc2fba99405275eb1f3eb/tree_sitter-0.24.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f3f00feff1fc47a8e4863561b8da8f5e023d382dd31ed3e43cd11d4cae445445", size = 140890 },
504
- { url = "https://files.pythonhosted.org/packages/5b/9b/b1ccfb187f8be78e2116176a091a2f2abfd043a06d78f80c97c97f315b37/tree_sitter-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f9691be48d98c49ef8f498460278884c666b44129222ed6217477dffad5d4831", size = 134413 },
505
- { url = "https://files.pythonhosted.org/packages/01/39/e25b0042a049eb27e991133a7aa7c49bb8e49a8a7b44ca34e7e6353ba7ac/tree_sitter-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:098a81df9f89cf254d92c1cd0660a838593f85d7505b28249216661d87adde4a", size = 560427 },
506
- { url = "https://files.pythonhosted.org/packages/1c/59/4d132f1388da5242151b90acf32cc56af779bfba063923699ab28b276b62/tree_sitter-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b26bf9e958da6eb7e74a081aab9d9c7d05f9baeaa830dbb67481898fd16f1f5", size = 574327 },
507
- { url = "https://files.pythonhosted.org/packages/ec/97/3914e45ab9e0ff0f157e493caa91791372508488b97ff0961a0640a37d25/tree_sitter-0.24.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2a84ff87a2f2a008867a1064aba510ab3bd608e3e0cd6e8fef0379efee266c73", size = 577171 },
508
- { url = "https://files.pythonhosted.org/packages/c5/b0/266a529c3eef171137b73cde8ad7aa282734354609a8b2f5564428e8f12d/tree_sitter-0.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:c012e4c345c57a95d92ab5a890c637aaa51ab3b7ff25ed7069834b1087361c95", size = 120260 },
509
- { url = "https://files.pythonhosted.org/packages/c1/c3/07bfaa345e0037ff75d98b7a643cf940146e4092a1fd54eed0359836be03/tree_sitter-0.24.0-cp310-cp310-win_arm64.whl", hash = "sha256:033506c1bc2ba7bd559b23a6bdbeaf1127cee3c68a094b82396718596dfe98bc", size = 108416 },
510
- { url = "https://files.pythonhosted.org/packages/66/08/82aaf7cbea7286ee2a0b43e9b75cb93ac6ac132991b7d3c26ebe5e5235a3/tree_sitter-0.24.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de0fb7c18c6068cacff46250c0a0473e8fc74d673e3e86555f131c2c1346fb13", size = 140733 },
511
- { url = "https://files.pythonhosted.org/packages/8c/bd/1a84574911c40734d80327495e6e218e8f17ef318dd62bb66b55c1e969f5/tree_sitter-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7c9c89666dea2ce2b2bf98e75f429d2876c569fab966afefdcd71974c6d8538", size = 134243 },
512
- { url = "https://files.pythonhosted.org/packages/46/c1/c2037af2c44996d7bde84eb1c9e42308cc84b547dd6da7f8a8bea33007e1/tree_sitter-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddb113e6b8b3e3b199695b1492a47d87d06c538e63050823d90ef13cac585fd", size = 562030 },
513
- { url = "https://files.pythonhosted.org/packages/4c/aa/2fb4d81886df958e6ec7e370895f7106d46d0bbdcc531768326124dc8972/tree_sitter-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01ea01a7003b88b92f7f875da6ba9d5d741e0c84bb1bd92c503c0eecd0ee6409", size = 575585 },
514
- { url = "https://files.pythonhosted.org/packages/e3/3c/5f997ce34c0d1b744e0f0c0757113bdfc173a2e3dadda92c751685cfcbd1/tree_sitter-0.24.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:464fa5b2cac63608915a9de8a6efd67a4da1929e603ea86abaeae2cb1fe89921", size = 578203 },
515
- { url = "https://files.pythonhosted.org/packages/d5/1f/f2bc7fa7c3081653ea4f2639e06ff0af4616c47105dbcc0746137da7620d/tree_sitter-0.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b1f3cbd9700e1fba0be2e7d801527e37c49fc02dc140714669144ef6ab58dce", size = 120147 },
516
- { url = "https://files.pythonhosted.org/packages/c0/4c/9add771772c4d72a328e656367ca948e389432548696a3819b69cdd6f41e/tree_sitter-0.24.0-cp311-cp311-win_arm64.whl", hash = "sha256:f3f08a2ca9f600b3758792ba2406971665ffbad810847398d180c48cee174ee2", size = 108302 },
517
- { url = "https://files.pythonhosted.org/packages/e9/57/3a590f287b5aa60c07d5545953912be3d252481bf5e178f750db75572bff/tree_sitter-0.24.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:14beeff5f11e223c37be7d5d119819880601a80d0399abe8c738ae2288804afc", size = 140788 },
518
- { url = "https://files.pythonhosted.org/packages/61/0b/fc289e0cba7dbe77c6655a4dd949cd23c663fd62a8b4d8f02f97e28d7fe5/tree_sitter-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26a5b130f70d5925d67b47db314da209063664585a2fd36fa69e0717738efaf4", size = 133945 },
519
- { url = "https://files.pythonhosted.org/packages/86/d7/80767238308a137e0b5b5c947aa243e3c1e3e430e6d0d5ae94b9a9ffd1a2/tree_sitter-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fc5c3c26d83c9d0ecb4fc4304fba35f034b7761d35286b936c1db1217558b4e", size = 564819 },
520
- { url = "https://files.pythonhosted.org/packages/bf/b3/6c5574f4b937b836601f5fb556b24804b0a6341f2eb42f40c0e6464339f4/tree_sitter-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:772e1bd8c0931c866b848d0369b32218ac97c24b04790ec4b0e409901945dd8e", size = 579303 },
521
- { url = "https://files.pythonhosted.org/packages/0a/f4/bd0ddf9abe242ea67cca18a64810f8af230fc1ea74b28bb702e838ccd874/tree_sitter-0.24.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:24a8dd03b0d6b8812425f3b84d2f4763322684e38baf74e5bb766128b5633dc7", size = 581054 },
522
- { url = "https://files.pythonhosted.org/packages/8c/1c/ff23fa4931b6ef1bbeac461b904ca7e49eaec7e7e5398584e3eef836ec96/tree_sitter-0.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9e8b1605ab60ed43803100f067eed71b0b0e6c1fb9860a262727dbfbbb74751", size = 120221 },
523
- { url = "https://files.pythonhosted.org/packages/b2/2a/9979c626f303177b7612a802237d0533155bf1e425ff6f73cc40f25453e2/tree_sitter-0.24.0-cp312-cp312-win_arm64.whl", hash = "sha256:f733a83d8355fc95561582b66bbea92ffd365c5d7a665bc9ebd25e049c2b2abb", size = 108234 },
524
- { url = "https://files.pythonhosted.org/packages/61/cd/2348339c85803330ce38cee1c6cbbfa78a656b34ff58606ebaf5c9e83bd0/tree_sitter-0.24.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d4a6416ed421c4210f0ca405a4834d5ccfbb8ad6692d4d74f7773ef68f92071", size = 140781 },
525
- { url = "https://files.pythonhosted.org/packages/8b/a3/1ea9d8b64e8dcfcc0051028a9c84a630301290995cd6e947bf88267ef7b1/tree_sitter-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0992d483677e71d5c5d37f30dfb2e3afec2f932a9c53eec4fca13869b788c6c", size = 133928 },
526
- { url = "https://files.pythonhosted.org/packages/fe/ae/55c1055609c9428a4aedf4b164400ab9adb0b1bf1538b51f4b3748a6c983/tree_sitter-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57277a12fbcefb1c8b206186068d456c600dbfbc3fd6c76968ee22614c5cd5ad", size = 564497 },
527
- { url = "https://files.pythonhosted.org/packages/ce/d0/f2ffcd04882c5aa28d205a787353130cbf84b2b8a977fd211bdc3b399ae3/tree_sitter-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d25fa22766d63f73716c6fec1a31ee5cf904aa429484256bd5fdf5259051ed74", size = 578917 },
528
- { url = "https://files.pythonhosted.org/packages/af/82/aebe78ea23a2b3a79324993d4915f3093ad1af43d7c2208ee90be9273273/tree_sitter-0.24.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7d5d9537507e1c8c5fa9935b34f320bfec4114d675e028f3ad94f11cf9db37b9", size = 581148 },
529
- { url = "https://files.pythonhosted.org/packages/a1/b4/6b0291a590c2b0417cfdb64ccb8ea242f270a46ed429c641fbc2bfab77e0/tree_sitter-0.24.0-cp313-cp313-win_amd64.whl", hash = "sha256:f58bb4956917715ec4d5a28681829a8dad5c342cafd4aea269f9132a83ca9b34", size = 120207 },
530
- { url = "https://files.pythonhosted.org/packages/a8/18/542fd844b75272630229c9939b03f7db232c71a9d82aadc59c596319ea6a/tree_sitter-0.24.0-cp313-cp313-win_arm64.whl", hash = "sha256:23641bd25dcd4bb0b6fa91b8fb3f46cc9f1c9f475efe4d536d3f1f688d1b84c8", size = 108232 },
333
+ { url = "https://files.pythonhosted.org/packages/fd/91/b89731ee36f4bd735be67a0170f3ee77c527d0e4e28ec330e73bb5924310/tree_sitter-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:05fa57c9d9f951e9e806689caff9a809e2a8c4477ee23ff41a5e65122bbeb4c3", size = 146757 },
334
+ { url = "https://files.pythonhosted.org/packages/5f/c8/de1051e16fd1e06056155a18587a28e82312a8e44a9deb9a95da2600c045/tree_sitter-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cd55cb2c2f311693694c6eee409b163246e9a809ede49371963ace8c93d77ad1", size = 140913 },
335
+ { url = "https://files.pythonhosted.org/packages/33/63/20ef6709ef6072e46bdc0655cd515e53a110d042c7b4c94fd5e8abd9e20a/tree_sitter-0.25.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5892ecb52b14b00605c6960af42d212c65610a0de3ae986208619fa42b676bad", size = 610872 },
336
+ { url = "https://files.pythonhosted.org/packages/09/52/80f2faebe7901df9a8aa98b2fe719a63d2ae8ad20e67c64f0cc775c78d51/tree_sitter-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3ec6a4ac2170af965e5b41bb603a5b0406ca8d93dac83d388c2246f0eef606a", size = 627920 },
337
+ { url = "https://files.pythonhosted.org/packages/0c/b1/10be3b91f38d08c1caa85df3bc39815aa3337feb24b5d7b1a3de5e46301f/tree_sitter-0.25.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d34bb4dda0518c07f6ea7880a463da338b2b72ce7c66bf32dc54f2ddcaf8463d", size = 623831 },
338
+ { url = "https://files.pythonhosted.org/packages/df/54/c69a6ba42f3af92a3bd07ab7954f0f269ed9f59de88121a8d33a30be5bbc/tree_sitter-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:5aad12ceb86745946a74e63a3cf5e111684589acb3d647e5ce40637e89714c48", size = 126870 },
339
+ { url = "https://files.pythonhosted.org/packages/76/c5/925984b3eb83942ed630bc27dddea31a2b26808fc7a7c8f931d07582a206/tree_sitter-0.25.0-cp310-cp310-win_arm64.whl", hash = "sha256:6ea484eec5e6538fdbabdd3c737d5f5250602e12dc9a33ed3b8e6a400ca115be", size = 113511 },
340
+ { url = "https://files.pythonhosted.org/packages/c7/bb/072c607766862da41f8b29ab5ed16fbdb7d57e2864a87aa2ea030c5fff19/tree_sitter-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5409a3be1010a483a9a8d5c64fdd20de7ea3e9c0c080e91e492a10a659bcac40", size = 146758 },
341
+ { url = "https://files.pythonhosted.org/packages/ae/37/7389b571dfea093c65b975893032b9f01917d9187d0d2e93723ec5b5717b/tree_sitter-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa1cd26faff9b3514e456cc0f4f0eb6b11bfdeec9a40ba8d55ee5a75d57566cb", size = 140909 },
342
+ { url = "https://files.pythonhosted.org/packages/c5/97/70540a0c608015d472b6208e968e670a6e09affaf3859edaab66f5b1b96c/tree_sitter-0.25.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddf745c668df39e4ef9a28fba4be4ecea990522e940b8e5bc656704c689b38ac", size = 615452 },
343
+ { url = "https://files.pythonhosted.org/packages/d2/00/343e3f95ccdad05cb34c9fa7f52eb6164870059821f88fe5a266c175553b/tree_sitter-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b39e177822dda5b42f2b6235af0a66c92ab6f1674f07d0e7b51be73957193370", size = 632430 },
344
+ { url = "https://files.pythonhosted.org/packages/96/32/468815a1fe60bca40cec0163bfeedd5aa86fe88a9c2c8cf29cdf3a1c3d33/tree_sitter-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:992cd17f97eae3245786160db4902f7b8106186aa18b9fcb873a86688e4d4dc8", size = 629356 },
345
+ { url = "https://files.pythonhosted.org/packages/7e/ff/121893bca3dd4bc4bcb7ba186fcb2a10570dc78feaf68d7e849c3f0af078/tree_sitter-0.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:14a138fe341348e7801c0afb580970597477fc68a0d0f6c780fc0a07eae2770e", size = 126878 },
346
+ { url = "https://files.pythonhosted.org/packages/ff/86/e3167c360664753b987f46b9bb97f952cb8c282199fc1429369cc99b646b/tree_sitter-0.25.0-cp311-cp311-win_arm64.whl", hash = "sha256:332e235eba90423edc6e83cc4a5dc60e91c03ace6c1d8729d0f2e0ca09210845", size = 113495 },
347
+ { url = "https://files.pythonhosted.org/packages/c5/75/36a4726a09aeb0477ca4a45aba4abf9705642b871539005ca91ddd68faa3/tree_sitter-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d9efacce0140ad74f97e027fb4ae693debff05f6246f3e024937f9500a0e874a", size = 147016 },
348
+ { url = "https://files.pythonhosted.org/packages/ff/5e/a549a21e459de94056cf48ca5e10e3774bc9b0460ffb3aec469a5f6001c0/tree_sitter-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82b4a5535107d2b8feee085edcafa89858faa4e1a98e94cfe1740c0ca8c28d84", size = 140832 },
349
+ { url = "https://files.pythonhosted.org/packages/d7/ed/7cc29a309e5f5cc209902c93589d29a4faeb656c7eecc1abd86842633b8f/tree_sitter-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c613372545490dfba3b3e7d934fda1156e3d16b27c0335c65a92f2b4fa6af5da", size = 617875 },
350
+ { url = "https://files.pythonhosted.org/packages/76/fc/43a61a35f021429d905ce272be9a9ea6dad6fe2c849782c53bd083a935cf/tree_sitter-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a90c815a354594d3147012ce470cfc797695ab768e29198815e147ef3c165", size = 635857 },
351
+ { url = "https://files.pythonhosted.org/packages/9b/28/c9236c505e35b3aedb3c941a359a708c173cbedab8d843fec729bab81ed9/tree_sitter-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f0b01b5068f1888af223021ba461480df28c76f39893c8113aae2154a2b81fd", size = 632649 },
352
+ { url = "https://files.pythonhosted.org/packages/13/d3/5dff82a02646619545c4e7c9b9ec87bc126f1937760228fcf2e91f5079c7/tree_sitter-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:1807bd1dae1f50721d65b270e6ffa85de84234ae39f98f4da702db56c2627e23", size = 126785 },
353
+ { url = "https://files.pythonhosted.org/packages/71/61/4fffd405569d9c1551906766825da75a2d8f1c075be8994542d5d7ba7768/tree_sitter-0.25.0-cp312-cp312-win_arm64.whl", hash = "sha256:7848be6aeab5c1d62d649506d80d0e463727cb1bb55f423e88bf317db0be8d67", size = 113615 },
354
+ { url = "https://files.pythonhosted.org/packages/7a/fd/7578088dddec9b89b60d8dfea1901f3a5dff61b66d3c637c309b6209c8db/tree_sitter-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:689a19d51103f727a545ec9ba9cd377267445859838c38ec55d159dc57e82e8a", size = 147009 },
355
+ { url = "https://files.pythonhosted.org/packages/7a/3e/6e3dac18c119acf738174a19ce91d89b34f6ad1ca1c5dd57b245ae15c935/tree_sitter-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:86288b218ef958dcafe40030d6d70c99baffaf808bd81b49de160f9724fc0ba4", size = 140828 },
356
+ { url = "https://files.pythonhosted.org/packages/fa/21/94d26f5d488d85bf5201280f82ce7de374ce30ed5d5469e57623d64ead9a/tree_sitter-0.25.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5241610319177ee2f68b8e719bf1e1b309155e126d9cd567ff84f20878d7e5d0", size = 618600 },
357
+ { url = "https://files.pythonhosted.org/packages/67/74/e852445871c0a82bfa5e3d16541e0ce6775ef458d3a8f03ab3737c661832/tree_sitter-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae1553d652a54926f80dc0a42fba07db110bb1a3ebaf47d1c4c64f8d44dd8207", size = 636691 },
358
+ { url = "https://files.pythonhosted.org/packages/87/67/759afe10e0018aa3ca3269df0257228b2df120e3956171a3667b133f3100/tree_sitter-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ccac581551407a73a519b872553973598b69d3d237ffaf32408fb38ecb775484", size = 632730 },
359
+ { url = "https://files.pythonhosted.org/packages/8d/42/24a80dafdb32f1f7d16e3236f2ba8a2bc7b0e5c2a19c7b45f874f0980e90/tree_sitter-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:d58e912869514ebb441b15c22a13a9c78f1b69be15f6a42b1d18e3f790e5d6ba", size = 126779 },
360
+ { url = "https://files.pythonhosted.org/packages/6f/2e/6af369e9d6deab9baaa60e2fa91acf82a68c63d835a2fe4f4265674ecc53/tree_sitter-0.25.0-cp313-cp313-win_arm64.whl", hash = "sha256:a1b8302161fa8da52cfafcd7575fa7d5806a9608a0b51c7a1fe45bfe70b62d46", size = 113623 },
531
361
  ]
532
362
 
533
363
  [[package]]
534
364
  name = "tree-sitter-cfengine"
535
- version = "1.0.8"
536
- source = { registry = "https://pypi.org/simple" }
537
- sdist = { url = "https://files.pythonhosted.org/packages/4c/35/4b56377fe5dfd6b2010582134aa5049e1d7d6289eccb000b52fee59772a6/tree_sitter_cfengine-1.0.8.tar.gz", hash = "sha256:ced0f72aba70db975c4f6a92bd50dda3444ee17a83250bdfc14baa6480150ee4", size = 14338 }
538
- wheels = [
539
- { url = "https://files.pythonhosted.org/packages/bf/ee/bb3c884b725d6b82e1439d101e26ab7c7e4f1ce0d685e49040648b50d1d3/tree_sitter_cfengine-1.0.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3b47a91e449d0dd48212081297a7689c3a99352f15bf9a2aa7719d52ded45af9", size = 11303 },
540
- { url = "https://files.pythonhosted.org/packages/4e/4e/f1ffdb82fe3ce751169ad821d4045bfc2a6b425c0acd3c74171a7624519f/tree_sitter_cfengine-1.0.8-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:647218fc741b2e4407f35e01d5c08891f7f61b48a6733480ab04cafda940b220", size = 11828 },
541
- { url = "https://files.pythonhosted.org/packages/96/87/2df7e8428fbde56cd944b923240ab733488704cb6056d8208c55c9baaa2b/tree_sitter_cfengine-1.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9782b7d51f977ab38e8f9dc2dbc43ecc19a787bbe87b08dbe43b984f16b99393", size = 23703 },
542
- { url = "https://files.pythonhosted.org/packages/47/8f/9cb8f9eaa3601f4f8bc53ce28174465a9b4c5e26613955f2989d67d4e482/tree_sitter_cfengine-1.0.8-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d501a9b7371af68e1b39284d9a26a1518201b63e6661a5a80b8bcc79a4363892", size = 23312 },
543
- { url = "https://files.pythonhosted.org/packages/0d/a2/24cc97825d56e3cb9150aa97402567d30380862705a91525b804aceb4f6f/tree_sitter_cfengine-1.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:c080e8621a8ff2991c3b8c2d05fcd03e57eb45ff9a7ed83a33382cdf097c95c7", size = 21657 },
544
- { url = "https://files.pythonhosted.org/packages/11/6b/12e514de3ccbf54ec33552ad0d93b2e0039df0e47ebd9c3c8f0b72af6512/tree_sitter_cfengine-1.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:3bae17a9b2b6b5c01c606ed6b03b8685bf0e8f1d4dcc87c45c6a89fa0c37920b", size = 14576 },
545
- { url = "https://files.pythonhosted.org/packages/13/e4/b719be2c1f1ce48c0a781b242d9d509e92c0041e6e7e581d4fdff92a4456/tree_sitter_cfengine-1.0.8-cp39-abi3-win_arm64.whl", hash = "sha256:41e5ac40a767893d9dd09ddc4ef2886bd008d72376ad14060c11abe6270e80b9", size = 13165 },
546
- ]
547
-
548
- [[package]]
549
- name = "typing-extensions"
550
- version = "4.14.1"
365
+ version = "1.0.11"
551
366
  source = { registry = "https://pypi.org/simple" }
552
- sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673 }
367
+ sdist = { url = "https://files.pythonhosted.org/packages/d1/98/2a8ec55f8f72a1968ff48ada6694e7d99fb34b9bc1022960aad6adcddca9/tree_sitter_cfengine-1.0.11.tar.gz", hash = "sha256:ff4f5b0282aa9c10dd0c3e643a521c82c95f78ae5c4e30b00f91763fa138c93d", size = 15141 }
553
368
  wheels = [
554
- { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906 },
369
+ { url = "https://files.pythonhosted.org/packages/10/14/9877edb41f4fda07799120e67e6d54bc6ebc3a5b25b0fe7035e3e2d9f7e1/tree_sitter_cfengine-1.0.11-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:32ca7d616a22a86c91b296cf2f38d0ed77e7bf1e48c385212eff154118a0af61", size = 12269 },
370
+ { url = "https://files.pythonhosted.org/packages/f4/82/330f3d65ae276ef51bc393968a0613d8b53acbbf68f3f6595d485e804410/tree_sitter_cfengine-1.0.11-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c286571aeafe1752bea44b4ac46b41441b3cad383dd8d6a1eb5e28733b897dd2", size = 12619 },
371
+ { url = "https://files.pythonhosted.org/packages/12/f8/e4f656d8b45a86665077d0eff9e1120e93e14c1b0748ef4e4f11e2ce4247/tree_sitter_cfengine-1.0.11-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dd2249962095ea10c0cec38bfa7c37f1eb868a5ff83864a271e374706af73aef", size = 23021 },
372
+ { url = "https://files.pythonhosted.org/packages/a1/0d/eb8d3d2c9a5cf74af03b6a36e55451ef5f8976c1c2c07d662db75e146655/tree_sitter_cfengine-1.0.11-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fcf1774374c9e42a664ef6e9bbc8161bb1582bc8eede1c39685a4e4d0673847", size = 24552 },
373
+ { url = "https://files.pythonhosted.org/packages/52/cc/2e4f2fd32799da09dbc87d64e17802686fbc0c6e10d7cc7f6b3ceb8f3d34/tree_sitter_cfengine-1.0.11-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8cd8246670e0430f4175eba653ba67bc1b788be48c2fc2cc02af9148882c38f0", size = 22838 },
374
+ { url = "https://files.pythonhosted.org/packages/db/c9/eb22d365c7cd2643f748cbb0696b77fccd9cfe7e1bb9cd979f4c75e8347b/tree_sitter_cfengine-1.0.11-cp39-abi3-win_amd64.whl", hash = "sha256:f9b263810a8eb08657eed40c48b1397a14c1caffe50cbeb17f736fba3108d476", size = 15210 },
375
+ { url = "https://files.pythonhosted.org/packages/8c/7f/29df033275b06d4dea10c70d104ce8866e5cafb65cbd7ab941343a487fd5/tree_sitter_cfengine-1.0.11-cp39-abi3-win_arm64.whl", hash = "sha256:d463c8b1246cd74c51d85130a719e03bc33dc4fafb1fe479a568749c4ba6c0c8", size = 14047 },
555
376
  ]
556
377
 
557
378
  [[package]]
@@ -1,6 +0,0 @@
1
- cf-remote>=0.6.4
2
- cfbs>=4.4.3
3
- tree-sitter-cfengine>=1.0.8
4
- tree-sitter>=0.23
5
- markdown-it-py>=3.0.0
6
- black>=25.1.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes