cfengine 0.16.1__tar.gz → 0.16.3__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 (157) hide show
  1. {cfengine-0.16.1 → cfengine-0.16.3}/PKG-INFO +1 -1
  2. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine.egg-info/PKG-INFO +1 -1
  3. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/docs.py +1 -0
  4. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/format.py +29 -8
  5. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/004_comments.expected.cf +13 -0
  6. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/004_comments.input.cf +11 -0
  7. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/006_remove_empty_comments.expected.cf +21 -0
  8. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/006_remove_empty_comments.input.cf +50 -0
  9. {cfengine-0.16.1 → cfengine-0.16.3}/.github/dependabot.yml +0 -0
  10. {cfengine-0.16.1 → cfengine-0.16.3}/.github/workflows/lint-policy-in-other-repos.yml +0 -0
  11. {cfengine-0.16.1 → cfengine-0.16.3}/.github/workflows/make-check.yml +0 -0
  12. {cfengine-0.16.1 → cfengine-0.16.3}/.github/workflows/pypi-publish.yml +0 -0
  13. {cfengine-0.16.1 → cfengine-0.16.3}/.github/workflows/stale.yml +0 -0
  14. {cfengine-0.16.1 → cfengine-0.16.3}/.github/workflows/update-syntax-description.yml +0 -0
  15. {cfengine-0.16.1 → cfengine-0.16.3}/.gitignore +0 -0
  16. {cfengine-0.16.1 → cfengine-0.16.3}/.python-version +0 -0
  17. {cfengine-0.16.1 → cfengine-0.16.3}/CLAUDE.md +0 -0
  18. {cfengine-0.16.1 → cfengine-0.16.3}/HACKING.md +0 -0
  19. {cfengine-0.16.1 → cfengine-0.16.3}/LICENSE +0 -0
  20. {cfengine-0.16.1 → cfengine-0.16.3}/Makefile +0 -0
  21. {cfengine-0.16.1 → cfengine-0.16.3}/README.md +0 -0
  22. {cfengine-0.16.1 → cfengine-0.16.3}/ci/01-install.sh +0 -0
  23. {cfengine-0.16.1 → cfengine-0.16.3}/ci/02-safe-tests.sh +0 -0
  24. {cfengine-0.16.1 → cfengine-0.16.3}/ci/03-unsafe-tests.sh +0 -0
  25. {cfengine-0.16.1 → cfengine-0.16.3}/pyproject.toml +0 -0
  26. {cfengine-0.16.1 → cfengine-0.16.3}/setup.cfg +0 -0
  27. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine.egg-info/SOURCES.txt +0 -0
  28. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine.egg-info/dependency_links.txt +0 -0
  29. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine.egg-info/entry_points.txt +0 -0
  30. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine.egg-info/requires.txt +0 -0
  31. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine.egg-info/top_level.txt +0 -0
  32. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/__init__.py +0 -0
  33. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/__main__.py +0 -0
  34. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/changelog.py +0 -0
  35. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/commands.py +0 -0
  36. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/deptool-README.md +0 -0
  37. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/deptool.py +0 -0
  38. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/dev.py +0 -0
  39. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/lint.py +0 -0
  40. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/lint_csv.py +0 -0
  41. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/lint_yml.py +0 -0
  42. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/main.py +0 -0
  43. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/__init__.py +0 -0
  44. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/analyze.py +0 -0
  45. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/check_download_matches_git.py +0 -0
  46. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/download.py +0 -0
  47. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/generate_git_tags.py +0 -0
  48. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/generate_release_information.py +0 -0
  49. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/generate_vcf_download.py +0 -0
  50. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/masterfiles/generate_vcf_git_checkout.py +0 -0
  51. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/paths.py +0 -0
  52. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/profile.py +0 -0
  53. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/shell.py +0 -0
  54. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/syntax-description.json +0 -0
  55. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/syntax_tree.py +0 -0
  56. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/up.py +0 -0
  57. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/utils.py +0 -0
  58. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/validate.py +0 -0
  59. {cfengine-0.16.1 → cfengine-0.16.3}/src/cfengine_cli/version.py +0 -0
  60. {cfengine-0.16.1 → cfengine-0.16.3}/tests/README.md +0 -0
  61. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/001_hello_world.expected.cf +0 -0
  62. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/001_hello_world.input.cf +0 -0
  63. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/002_basics.expected.cf +0 -0
  64. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/002_basics.input.cf +0 -0
  65. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/003_wrapping.expected.cf +0 -0
  66. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/003_wrapping.input.cf +0 -0
  67. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/005_bundle_comments.expected.cf +0 -0
  68. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/005_bundle_comments.input.cf +0 -0
  69. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/007_class_guarded_empty_lines.expected.cf +0 -0
  70. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/007_class_guarded_empty_lines.input.cf +0 -0
  71. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/008_long_string.expected.cf +0 -0
  72. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/008_long_string.input.cf +0 -0
  73. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/009_single_line.expected.cf +0 -0
  74. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/009_single_line.input.cf +0 -0
  75. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/010_stakeholder.expected.cf +0 -0
  76. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/010_stakeholder.input.cf +0 -0
  77. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/011_macros.expected.cf +0 -0
  78. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/011_macros.input.cf +0 -0
  79. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/011_promises.expected.cf +0 -0
  80. {cfengine-0.16.1 → cfengine-0.16.3}/tests/format/011_promises.input.cf +0 -0
  81. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/001_hello_world.cf +0 -0
  82. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/002_deprecations.expected.txt +0 -0
  83. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/002_deprecations.x.cf +0 -0
  84. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/003_name_lowercase.cf +0 -0
  85. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/003_name_lowercase.expected.txt +0 -0
  86. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/003_name_lowercase.x.cf +0 -0
  87. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/004_block_type.cf +0 -0
  88. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/004_block_type.expected.txt +0 -0
  89. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/004_block_type.x.cf +0 -0
  90. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/005_syntax_error.cf +0 -0
  91. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/005_syntax_error.expected.txt +0 -0
  92. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/005_syntax_error.x.cf +0 -0
  93. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/006_empty_file.expected.txt +0 -0
  94. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/006_empty_file.x.cf +0 -0
  95. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/007_namespace.cf +0 -0
  96. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/007_namespace.expected.txt +0 -0
  97. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/007_namespace.x.cf +0 -0
  98. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/008_bundle_shadows_function.cf +0 -0
  99. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/008_bundle_shadows_function.expected.txt +0 -0
  100. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/008_bundle_shadows_function.x.cf +0 -0
  101. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/009_unknown_function_inside_vars.cf +0 -0
  102. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/009_unknown_function_inside_vars.expected.txt +0 -0
  103. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/009_unknown_function_inside_vars.x.cf +0 -0
  104. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/010_mutually_exclusive_types_vars.cf +0 -0
  105. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/010_mutually_exclusive_types_vars.expected.txt +0 -0
  106. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/010_mutually_exclusive_types_vars.x.cf +0 -0
  107. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/011_invalid_attributes.expected.txt +0 -0
  108. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/011_invalid_attributes.x.cf +0 -0
  109. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/012_function_call_arg_count.cf +0 -0
  110. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/012_function_call_arg_count.expected.txt +0 -0
  111. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/012_function_call_arg_count.x.cf +0 -0
  112. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/013_num_args_body.expected.txt +0 -0
  113. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/013_num_args_body.x.cf +0 -0
  114. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/013_num_args_bundle.expected.txt +0 -0
  115. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/013_num_args_bundle.x.cf +0 -0
  116. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/013_num_args_bundle_body.cf +0 -0
  117. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/014_variadic_func_arg_count.cf +0 -0
  118. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/014_variadic_func_arg_count.expected.txt +0 -0
  119. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/014_variadic_func_arg_count.x.cf +0 -0
  120. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/015_macro_multi_def_bundle.cf +0 -0
  121. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/015_macro_multi_def_bundle.expected.txt +0 -0
  122. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/015_macro_multi_def_bundle.x.cf +0 -0
  123. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/016_half_promises.cf +0 -0
  124. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/016_half_promises.expected.txt +0 -0
  125. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/016_half_promises.x.cf +0 -0
  126. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/017_implies_body.cf +0 -0
  127. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/017_implies_body.expected.txt +0 -0
  128. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/017_implies_body.x.cf +0 -0
  129. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/018_nested_calls.cf +0 -0
  130. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/018_nested_calls.expected.txt +0 -0
  131. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/018_nested_calls.x.cf +0 -0
  132. {cfengine-0.16.1 → cfengine-0.16.3}/tests/lint/019_bundle_name_expansion.cf +0 -0
  133. {cfengine-0.16.1 → cfengine-0.16.3}/tests/run-format-tests.sh +0 -0
  134. {cfengine-0.16.1 → cfengine-0.16.3}/tests/run-lint-tests.sh +0 -0
  135. {cfengine-0.16.1 → cfengine-0.16.3}/tests/run-shell-tests.sh +0 -0
  136. {cfengine-0.16.1 → cfengine-0.16.3}/tests/run-up-validate-tests.sh +0 -0
  137. {cfengine-0.16.1 → cfengine-0.16.3}/tests/shell/001-help.sh +0 -0
  138. {cfengine-0.16.1 → cfengine-0.16.3}/tests/shell/002-version.sh +0 -0
  139. {cfengine-0.16.1 → cfengine-0.16.3}/tests/shell/003-format.sh +0 -0
  140. {cfengine-0.16.1 → cfengine-0.16.3}/tests/shell/004-format-check.sh +0 -0
  141. {cfengine-0.16.1 → cfengine-0.16.3}/tests/shell/005-lint.sh +0 -0
  142. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/__init__.py +0 -0
  143. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_changelog.py +0 -0
  144. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_deps.py +0 -0
  145. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_format.py +0 -0
  146. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_lint_csv.py +0 -0
  147. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_lint_yml.py +0 -0
  148. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_paths.py +0 -0
  149. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_utils.py +0 -0
  150. {cfengine-0.16.1 → cfengine-0.16.3}/tests/unit/test_version.py +0 -0
  151. {cfengine-0.16.1 → cfengine-0.16.3}/tests/up-validate/001_complex_config.yaml +0 -0
  152. {cfengine-0.16.1 → cfengine-0.16.3}/tests/up-validate/002_version.x.yaml +0 -0
  153. {cfengine-0.16.1 → cfengine-0.16.3}/tests/up-validate/003_box.x.yaml +0 -0
  154. {cfengine-0.16.1 → cfengine-0.16.3}/tests/up-validate/004_count.x.yaml +0 -0
  155. {cfengine-0.16.1 → cfengine-0.16.3}/tests/up-validate/mocks/cloud_config.json +0 -0
  156. {cfengine-0.16.1 → cfengine-0.16.3}/tests/up-validate/mocks/vagrant +0 -0
  157. {cfengine-0.16.1 → cfengine-0.16.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.16.1
3
+ Version: 0.16.3
4
4
  Summary: Human-oriented CLI for interacting with CFEngine policy language, projects, and other CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.16.1
3
+ Version: 0.16.3
4
4
  Summary: Human-oriented CLI for interacting with CFEngine policy language, projects, and other CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -279,6 +279,7 @@ def _process_markdown_code_blocks(
279
279
  for cb in parsed_markdowns["files"][origin_path]["code-blocks"][i:]:
280
280
  cb["first_line"] += offset
281
281
  cb["last_line"] += offset
282
+ offset = 0
282
283
 
283
284
  language = _translate_language(code_block["language"])
284
285
  snippet_number = i + 1
@@ -711,6 +711,10 @@ def _format_block_header(node: Node, fmt: Formatter) -> list[Node]:
711
711
  def _needs_blank_line_before(child: Node, indent: int, line_length: int) -> bool:
712
712
  """Check if a blank separator line should precede this child node."""
713
713
  prev = child.prev_named_sibling
714
+ # Empty comments preceding this child will be dropped — look past them
715
+ # so we evaluate against the real prior content.
716
+ while prev and prev.type == "comment" and _is_empty_comment(prev):
717
+ prev = prev.prev_named_sibling
714
718
  if not prev:
715
719
  return False
716
720
 
@@ -743,12 +747,6 @@ def _needs_blank_line_before(child: Node, indent: int, line_length: int) -> bool
743
747
  if child.type == "comment":
744
748
  if _is_empty_comment(child):
745
749
  return False
746
- # Empty comments preceding this one will be dropped — look past them
747
- # so we treat the comment as following the real prior content.
748
- while prev and prev.type == "comment" and _is_empty_comment(prev):
749
- prev = prev.prev_named_sibling
750
- if prev is None:
751
- return False
752
750
  # Top-level comment after a complete block — visually separates them
753
751
  if prev.type in BLOCK_TYPES:
754
752
  return True
@@ -783,12 +781,27 @@ def _needs_blank_line_before(child: Node, indent: int, line_length: int) -> bool
783
781
 
784
782
 
785
783
  def _is_empty_comment(node: Node) -> bool:
786
- """Check if a bare '#' comment should be dropped (not between other comments)."""
784
+ """Check if a bare '#' comment should be dropped.
785
+
786
+ A run of bare '#' between two non-empty comments collapses to a
787
+ single '#' — the first in the run is kept, the rest are dropped.
788
+ Bare '#' not flanked by real comments is always dropped."""
787
789
  if text(node).strip() != "#":
788
790
  return False
789
791
  prev = node.prev_named_sibling
792
+ # Not the first in a run of '#' — a kept '#' precedes us, drop.
793
+ if prev and prev.type == "comment" and text(prev).strip() == "#":
794
+ return True
795
+ # First in a run — kept only if a non-empty comment sits on each side
796
+ # (forward search walks past the rest of the run to find one).
797
+ if not (prev and prev.type == "comment"):
798
+ return True
790
799
  nxt = node.next_named_sibling
791
- return not (prev and prev.type == "comment" and nxt and nxt.type == "comment")
800
+ while nxt and nxt.type == "comment" and text(nxt).strip() == "#":
801
+ nxt = nxt.next_named_sibling
802
+ if not (nxt and nxt.type == "comment"):
803
+ return True
804
+ return False
792
805
 
793
806
 
794
807
  def _skip_comments(sibling: Node | None, direction: str = "next") -> Node | None:
@@ -809,6 +822,10 @@ def _comment_indent(node: Node, indent: int) -> int:
809
822
  # content at the end of the previous sibling subtree, so that comments
810
823
  # appended after a class-guarded block visually belong to that block.
811
824
  if nearest is None:
825
+ # A comment between a promiser and its terminating ';' is a promise
826
+ # continuation — indent it past the promiser.
827
+ if node.parent and node.parent.type in {"promise", "half_promise"}:
828
+ return indent + 2
812
829
  prev = _skip_comments(node.prev_named_sibling, "prev")
813
830
  if prev and prev.type in INDENTED_TYPES:
814
831
  return _trailing_comment_indent(prev, indent)
@@ -892,6 +909,10 @@ def _autoformat(
892
909
  if node.type in {",", ";"}:
893
910
  if previous and previous.type == "macro":
894
911
  fmt.print(node, indent + 2)
912
+ elif previous and previous.type == "comment":
913
+ # A '#' comment runs to end of line, so a following ';'/',' can't
914
+ # share that line — put it on its own continuation line.
915
+ fmt.print(node, indent + 2)
895
916
  else:
896
917
  fmt.print_same_line(node)
897
918
  elif node.type == "comment":
@@ -151,3 +151,16 @@ bundle agent stigs
151
151
  vars:
152
152
  "foo" string => "bar";
153
153
  }
154
+
155
+ bundle agent example_comment_before_semicolon
156
+ {
157
+ files:
158
+ "affected object"
159
+ # ...details....
160
+ ;
161
+
162
+ processes:
163
+ "affected object"
164
+ # ...details....
165
+ ;
166
+ }
@@ -143,3 +143,14 @@ bundle agent stigs
143
143
  vars:
144
144
  "foo" string => "bar";
145
145
  }
146
+ bundle agent example_comment_before_semicolon
147
+ {
148
+ files:
149
+ "affected object"
150
+ # ...details....
151
+ ;
152
+ processes:
153
+ "affected object"
154
+ # ...details....
155
+ ;
156
+ }
@@ -1,3 +1,6 @@
1
+ # explanation
2
+ #
3
+ # one more line
1
4
  bundle agent main
2
5
  {
3
6
  # comment
@@ -22,3 +25,21 @@ bundle agent c
22
25
  reports:
23
26
  "hello";
24
27
  }
28
+
29
+ bundle agent d
30
+ {
31
+ reports:
32
+ "hello";
33
+
34
+ any::
35
+ "world";
36
+ }
37
+
38
+ bundle agent e
39
+ {
40
+ reports:
41
+ "hello";
42
+
43
+ any::
44
+ "world";
45
+ }
@@ -1,3 +1,18 @@
1
+ #
2
+ #
3
+ #
4
+ #
5
+ #
6
+ # explanation
7
+ #
8
+ #
9
+ #
10
+ #
11
+ # one more line
12
+ #
13
+ #
14
+ #
15
+ #
1
16
  bundle agent main
2
17
  {
3
18
  #
@@ -28,3 +43,38 @@ bundle agent c
28
43
  reports:
29
44
  "hello";
30
45
  }
46
+ #
47
+ bundle agent d
48
+ {
49
+ #
50
+ reports:
51
+ #
52
+ "hello";
53
+ #
54
+ any::
55
+ #
56
+ "world";
57
+ }
58
+
59
+ #
60
+ #
61
+ #
62
+ bundle agent e
63
+ {
64
+ #
65
+ #
66
+ #
67
+ reports:
68
+ #
69
+ #
70
+ #
71
+ "hello";
72
+ #
73
+ #
74
+ #
75
+ any::
76
+ #
77
+ #
78
+ #
79
+ "world";
80
+ }
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