code_ownership 2.1.2 → 2.1.3

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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +9 -2
  4. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.cargo-checksum.json +1 -1
  5. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/Cargo.lock +8 -1
  6. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/Cargo.toml +2 -1
  7. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/file_generator.rs +119 -9
  8. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/validator.rs +77 -15
  9. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/executable_name_config_test.rs +25 -4
  10. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/.github/CODEOWNERS +1 -1
  11. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/.github/CODEOWNERS +1 -1
  12. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/invalid_project_test.rs +30 -0
  13. data/ext/cargo-vendor/similar-2.7.0/.cargo/config.toml +2 -0
  14. data/ext/cargo-vendor/similar-2.7.0/.cargo-checksum.json +1 -0
  15. data/ext/cargo-vendor/similar-2.7.0/.cargo_vcs_info.json +6 -0
  16. data/ext/cargo-vendor/similar-2.7.0/.github/FUNDING.yml +1 -0
  17. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/clippy.yml +16 -0
  18. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/rustfmt.yml +16 -0
  19. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/tests.yml +49 -0
  20. data/ext/cargo-vendor/similar-2.7.0/.vscode/settings.json +5 -0
  21. data/ext/cargo-vendor/similar-2.7.0/CHANGELOG.md +132 -0
  22. data/ext/cargo-vendor/similar-2.7.0/Cargo.lock +373 -0
  23. data/ext/cargo-vendor/similar-2.7.0/Cargo.lock.msrv +266 -0
  24. data/ext/cargo-vendor/similar-2.7.0/Cargo.toml +149 -0
  25. data/ext/cargo-vendor/similar-2.7.0/Cargo.toml.orig +73 -0
  26. data/ext/cargo-vendor/similar-2.7.0/LICENSE +201 -0
  27. data/ext/cargo-vendor/similar-2.7.0/Makefile +31 -0
  28. data/ext/cargo-vendor/similar-2.7.0/README.md +59 -0
  29. data/ext/cargo-vendor/similar-2.7.0/clippy.toml +1 -0
  30. data/ext/cargo-vendor/similar-2.7.0/examples/close-matches.rs +15 -0
  31. data/ext/cargo-vendor/similar-2.7.0/examples/large.rs +8 -0
  32. data/ext/cargo-vendor/similar-2.7.0/examples/nonstring.rs +13 -0
  33. data/ext/cargo-vendor/similar-2.7.0/examples/original-slices.rs +11 -0
  34. data/ext/cargo-vendor/similar-2.7.0/examples/patience.rs +48 -0
  35. data/ext/cargo-vendor/similar-2.7.0/examples/serde.rs +15 -0
  36. data/ext/cargo-vendor/similar-2.7.0/examples/terminal-inline.rs +60 -0
  37. data/ext/cargo-vendor/similar-2.7.0/examples/terminal.rs +20 -0
  38. data/ext/cargo-vendor/similar-2.7.0/examples/udiff.rs +24 -0
  39. data/ext/cargo-vendor/similar-2.7.0/scripts/wasmtime-wrapper.sh +4 -0
  40. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/capture.rs +117 -0
  41. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/compact.rs +351 -0
  42. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/hook.rs +178 -0
  43. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/lcs.rs +294 -0
  44. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/mod.rs +134 -0
  45. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/myers.rs +442 -0
  46. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/patience.rs +198 -0
  47. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/replace.rs +221 -0
  48. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping-2.snap +60 -0
  49. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping.snap +64 -0
  50. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__contiguous.snap +28 -0
  51. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__diff.snap +22 -0
  52. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__pat.snap +31 -0
  53. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__same.snap +12 -0
  54. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__contiguous.snap +28 -0
  55. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__deadline_reached.snap +22 -0
  56. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__diff.snap +22 -0
  57. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__pat.snap +31 -0
  58. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__patience__patience.snap +45 -0
  59. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__patience__patience_out_of_bounds_bug.snap +16 -0
  60. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/utils.rs +379 -0
  61. data/ext/cargo-vendor/similar-2.7.0/src/common.rs +185 -0
  62. data/ext/cargo-vendor/similar-2.7.0/src/deadline_support.rs +37 -0
  63. data/ext/cargo-vendor/similar-2.7.0/src/iter.rs +195 -0
  64. data/ext/cargo-vendor/similar-2.7.0/src/lib.rs +176 -0
  65. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff.snap +25 -0
  66. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff_newline_hint-2.snap +10 -0
  67. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff_newline_hint.snap +11 -0
  68. data/ext/cargo-vendor/similar-2.7.0/src/text/abstraction.rs +446 -0
  69. data/ext/cargo-vendor/similar-2.7.0/src/text/inline.rs +342 -0
  70. data/ext/cargo-vendor/similar-2.7.0/src/text/mod.rs +792 -0
  71. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__captured_ops.snap +22 -0
  72. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__captured_word_ops.snap +202 -0
  73. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__char_diff.snap +39 -0
  74. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__inline__line_ops_inline.snap +126 -0
  75. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__inline__serde.snap +107 -0
  76. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__lifetimes_on_iter.snap +42 -0
  77. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__line_ops.snap +42 -0
  78. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__serde.snap +55 -0
  79. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__serde_ops.snap +38 -0
  80. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__unified_diff.snap +12 -0
  81. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__virtual_newlines.snap +32 -0
  82. data/ext/cargo-vendor/similar-2.7.0/src/text/utils.rs +55 -0
  83. data/ext/cargo-vendor/similar-2.7.0/src/types.rs +502 -0
  84. data/ext/cargo-vendor/similar-2.7.0/src/udiff.rs +359 -0
  85. data/ext/cargo-vendor/similar-2.7.0/src/utils.rs +412 -0
  86. data/ext/code_ownership/Cargo.toml +1 -1
  87. data/lib/code_ownership/version.rb +1 -1
  88. metadata +252 -178
  89. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/CODEOWNERS +0 -0
  90. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/workflows/audit.yml +0 -0
  91. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/workflows/ci.yml +0 -0
  92. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/workflows/dotslash-config.json +0 -0
  93. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.rustfmt.toml +0 -0
  94. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.rusty-hook.toml +0 -0
  95. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/AGENTS.md +0 -0
  96. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/CLAUDE.md +0 -0
  97. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/README.md +0 -0
  98. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/dev/run_benchmarks_for_file.sh +0 -0
  99. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/dev/run_benchmarks_for_gv.sh +0 -0
  100. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/rust-toolchain.toml +0 -0
  101. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cache/file.rs +0 -0
  102. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cache/mod.rs +0 -0
  103. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cache/noop.rs +0 -0
  104. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cli.rs +0 -0
  105. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/common_test.rs +0 -0
  106. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/config.rs +0 -0
  107. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/crosscheck.rs +0 -0
  108. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/lib.rs +0 -0
  109. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/main.rs +0 -0
  110. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/codeowners_file_parser.rs +0 -0
  111. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/codeowners_query.rs +0 -0
  112. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/file_owner_finder.rs +0 -0
  113. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/file_owner_resolver.rs +0 -0
  114. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
  115. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/directory_mapper.rs +0 -0
  116. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/escaper.rs +0 -0
  117. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/package_mapper.rs +0 -0
  118. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  119. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  120. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  121. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper.rs +0 -0
  122. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership.rs +0 -0
  123. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/path_utils.rs +0 -0
  124. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/project.rs +0 -0
  125. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/project_builder.rs +0 -0
  126. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/project_file_builder.rs +0 -0
  127. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/runner/api.rs +0 -0
  128. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/runner/types.rs +0 -0
  129. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/runner.rs +0 -0
  130. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/tracked_files.rs +0 -0
  131. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/cache_test.rs +0 -0
  132. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/codeowners_path_test.rs +0 -0
  133. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/common/mod.rs +0 -0
  134. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/crosscheck_owners_test.rs +0 -0
  135. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +0 -0
  136. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +0 -0
  137. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +0 -0
  138. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +0 -0
  139. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +0 -0
  140. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/app/foo.rb +0 -0
  141. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/config/code_ownership.yml +0 -0
  142. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/config/teams/foo.yml +0 -0
  143. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/config/teams/payments.yml +0 -0
  144. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +0 -0
  145. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/app/bar.rb +0 -0
  146. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/config/code_ownership.yml +0 -0
  147. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/config/teams/bar.yml +0 -0
  148. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  149. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  150. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  151. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  152. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  153. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  154. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  155. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  156. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  157. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  158. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  159. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  160. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  161. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
  162. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/.keep +0 -0
  163. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
  164. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
  165. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
  166. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
  167. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
  168. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +0 -0
  169. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
  170. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +0 -0
  171. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/.github/CODEOWNERS +0 -0
  172. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/config/code_ownership.yml +0 -0
  173. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/config/teams/bad_team.yml +0 -0
  174. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/config/teams/good.yml +0 -0
  175. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/gems/pets/dog.rb +0 -0
  176. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  177. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  178. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
  179. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  180. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
  181. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  182. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
  183. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
  184. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  185. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
  186. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
  187. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/.ignore +0 -0
  188. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
  189. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  190. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  191. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  192. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  193. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/gems/pets/dog.rb +0 -0
  194. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  195. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  196. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  197. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  198. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  199. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  200. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
  201. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  202. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
  203. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  204. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
  205. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  206. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  207. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  208. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
  209. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +0 -0
  210. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +0 -0
  211. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  212. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  213. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
  214. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
  215. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
  216. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
  217. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
  218. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
  219. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
  220. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +0 -0
  221. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +0 -0
  222. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +0 -0
  223. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +0 -0
  224. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +0 -0
  225. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +0 -0
  226. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +0 -0
  227. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +0 -0
  228. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +0 -0
  229. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +0 -0
  230. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +0 -0
  231. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb +0 -0
  232. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
  233. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
  234. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
  235. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
  236. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
  237. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +0 -0
  238. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +0 -0
  239. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
  240. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +0 -0
  241. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +0 -0
  242. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
  243. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +0 -0
  244. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
  245. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
  246. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/git_stage_test.rs +0 -0
  247. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/invalid_project_structure_test.rs +0 -0
  248. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/missing_github_team_test.rs +0 -0
  249. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/multiple_directory_owners_test.rs +0 -0
  250. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/run_config_executable_override_test.rs +0 -0
  251. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/runner_api.rs +0 -0
  252. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/untracked_files_test.rs +0 -0
  253. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/valid_project_test.rs +0 -0
  254. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/valid_project_with_overrides_test.rs +0 -0
  255. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/validate_files_test.rs +0 -0
  256. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tmp/.gitkeep +0 -0
@@ -0,0 +1,412 @@
1
+ //! Utilities for common diff related operations.
2
+ //!
3
+ //! This module provides specialized utilities and simplified diff operations
4
+ //! for common operations. It's useful when you want to work with text diffs
5
+ //! and you're interested in getting vectors of these changes directly.
6
+ //!
7
+ //! # Slice Remapping
8
+ //!
9
+ //! When working with [`TextDiff`] it's common that one takes advantage of the
10
+ //! built-in tokenization of the differ. This for instance lets you do
11
+ //! grapheme level diffs. This is implemented by the differ generating rather
12
+ //! small slices of strings and running a diff algorithm over them.
13
+ //!
14
+ //! The downside of this is that all the [`DiffOp`] objects produced by the
15
+ //! diffing algorithm encode operations on these rather small slices. For
16
+ //! a lot of use cases this is not what one wants which can make this very
17
+ //! inconvenient. This module provides a [`TextDiffRemapper`] which lets you
18
+ //! map from the ranges that the [`TextDiff`] returns to the original input
19
+ //! strings. For more information see [`TextDiffRemapper`].
20
+ //!
21
+ //! # Simple Diff Functions
22
+ //!
23
+ //! This module provides a range of common test diff functions that will
24
+ //! produce vectors of `(change_tag, value)` tuples. They will automatically
25
+ //! optimize towards returning the most useful slice that one would expect for
26
+ //! the type of diff performed.
27
+
28
+ use std::hash::Hash;
29
+ use std::ops::{Index, Range};
30
+
31
+ use crate::{
32
+ capture_diff_slices, Algorithm, ChangeTag, DiffOp, DiffableStr, DiffableStrRef, TextDiff,
33
+ };
34
+
35
+ struct SliceRemapper<'x, T: ?Sized> {
36
+ source: &'x T,
37
+ indexes: Vec<Range<usize>>,
38
+ }
39
+
40
+ impl<'x, T: DiffableStr + ?Sized> SliceRemapper<'x, T> {
41
+ fn new(source: &'x T, slices: &[&'x T]) -> SliceRemapper<'x, T> {
42
+ let indexes = slices
43
+ .iter()
44
+ .scan(0, |state, item| {
45
+ let start = *state;
46
+ let end = start + item.len();
47
+ *state = end;
48
+ Some(start..end)
49
+ })
50
+ .collect();
51
+ SliceRemapper { source, indexes }
52
+ }
53
+
54
+ fn slice(&self, range: Range<usize>) -> Option<&'x T> {
55
+ let start = self.indexes.get(range.start)?.start;
56
+ let end = self.indexes.get(range.end - 1)?.end;
57
+ Some(self.source.slice(start..end))
58
+ }
59
+ }
60
+
61
+ impl<T: DiffableStr + ?Sized> Index<Range<usize>> for SliceRemapper<'_, T> {
62
+ type Output = T;
63
+
64
+ fn index(&self, range: Range<usize>) -> &Self::Output {
65
+ self.slice(range).expect("out of bounds")
66
+ }
67
+ }
68
+
69
+ /// A remapper that can remap diff ops to the original slices.
70
+ ///
71
+ /// The idea here is that when a [`TextDiff`](crate::TextDiff) is created from
72
+ /// two strings and the internal tokenization is used, this remapper can take
73
+ /// a range in the tokenized sequences and remap it to the original string.
74
+ /// This is particularly useful when you want to do things like character or
75
+ /// grapheme level diffs but you want to not have to iterate over small sequences
76
+ /// but large consequitive ones from the source.
77
+ ///
78
+ /// ```rust
79
+ /// use similar::{ChangeTag, TextDiff};
80
+ /// use similar::utils::TextDiffRemapper;
81
+ ///
82
+ /// let old = "yo! foo bar baz";
83
+ /// let new = "yo! foo bor baz";
84
+ /// let diff = TextDiff::from_words(old, new);
85
+ /// let remapper = TextDiffRemapper::from_text_diff(&diff, old, new);
86
+ /// let changes: Vec<_> = diff.ops()
87
+ /// .iter()
88
+ /// .flat_map(move |x| remapper.iter_slices(x))
89
+ /// .collect();
90
+ ///
91
+ /// assert_eq!(changes, vec![
92
+ /// (ChangeTag::Equal, "yo! foo "),
93
+ /// (ChangeTag::Delete, "bar"),
94
+ /// (ChangeTag::Insert, "bor"),
95
+ /// (ChangeTag::Equal, " baz")
96
+ /// ]);
97
+ pub struct TextDiffRemapper<'x, T: ?Sized> {
98
+ old: SliceRemapper<'x, T>,
99
+ new: SliceRemapper<'x, T>,
100
+ }
101
+
102
+ impl<'x, T: DiffableStr + ?Sized> TextDiffRemapper<'x, T> {
103
+ /// Creates a new remapper from strings and slices.
104
+ pub fn new(
105
+ old_slices: &[&'x T],
106
+ new_slices: &[&'x T],
107
+ old: &'x T,
108
+ new: &'x T,
109
+ ) -> TextDiffRemapper<'x, T> {
110
+ TextDiffRemapper {
111
+ old: SliceRemapper::new(old, old_slices),
112
+ new: SliceRemapper::new(new, new_slices),
113
+ }
114
+ }
115
+
116
+ /// Creates a new remapper from a text diff and the original strings.
117
+ pub fn from_text_diff<'old, 'new, 'bufs>(
118
+ diff: &TextDiff<'old, 'new, 'bufs, T>,
119
+ old: &'x T,
120
+ new: &'x T,
121
+ ) -> TextDiffRemapper<'x, T>
122
+ where
123
+ 'old: 'x,
124
+ 'new: 'x,
125
+ {
126
+ TextDiffRemapper {
127
+ old: SliceRemapper::new(old, diff.old_slices()),
128
+ new: SliceRemapper::new(new, diff.new_slices()),
129
+ }
130
+ }
131
+
132
+ /// Slices into the old string.
133
+ pub fn slice_old(&self, range: Range<usize>) -> Option<&'x T> {
134
+ self.old.slice(range)
135
+ }
136
+
137
+ /// Slices into the new string.
138
+ pub fn slice_new(&self, range: Range<usize>) -> Option<&'x T> {
139
+ self.new.slice(range)
140
+ }
141
+
142
+ /// Given a diffop yields the changes it encodes against the original strings.
143
+ ///
144
+ /// This is the same as the [`DiffOp::iter_slices`] method.
145
+ ///
146
+ /// ## Panics
147
+ ///
148
+ /// This method can panic if the input strings passed to the constructor
149
+ /// are incompatible with the input strings passed to the diffing algorithm.
150
+ pub fn iter_slices(&self, op: &DiffOp) -> impl Iterator<Item = (ChangeTag, &'x T)> {
151
+ // note: this is equivalent to the code in `DiffOp::iter_slices`. It is
152
+ // a copy/paste because the slicing currently cannot be well abstracted
153
+ // because of lifetime issues caused by the `Index` trait.
154
+ match *op {
155
+ DiffOp::Equal { old_index, len, .. } => {
156
+ Some((ChangeTag::Equal, self.old.slice(old_index..old_index + len)))
157
+ .into_iter()
158
+ .chain(None)
159
+ }
160
+ DiffOp::Insert {
161
+ new_index, new_len, ..
162
+ } => Some((
163
+ ChangeTag::Insert,
164
+ self.new.slice(new_index..new_index + new_len),
165
+ ))
166
+ .into_iter()
167
+ .chain(None),
168
+ DiffOp::Delete {
169
+ old_index, old_len, ..
170
+ } => Some((
171
+ ChangeTag::Delete,
172
+ self.old.slice(old_index..old_index + old_len),
173
+ ))
174
+ .into_iter()
175
+ .chain(None),
176
+ DiffOp::Replace {
177
+ old_index,
178
+ old_len,
179
+ new_index,
180
+ new_len,
181
+ } => Some((
182
+ ChangeTag::Delete,
183
+ self.old.slice(old_index..old_index + old_len),
184
+ ))
185
+ .into_iter()
186
+ .chain(Some((
187
+ ChangeTag::Insert,
188
+ self.new.slice(new_index..new_index + new_len),
189
+ ))),
190
+ }
191
+ .map(|(tag, opt_val)| (tag, opt_val.expect("slice out of bounds")))
192
+ }
193
+ }
194
+
195
+ /// Shortcut for diffing two slices.
196
+ ///
197
+ /// This function produces the diff of two slices and returns a vector
198
+ /// with the changes.
199
+ ///
200
+ /// ```rust
201
+ /// use similar::{Algorithm, ChangeTag};
202
+ /// use similar::utils::diff_slices;
203
+ ///
204
+ /// let old = "foo\nbar\nbaz".lines().collect::<Vec<_>>();
205
+ /// let new = "foo\nbar\nBAZ".lines().collect::<Vec<_>>();
206
+ /// assert_eq!(diff_slices(Algorithm::Myers, &old, &new), vec![
207
+ /// (ChangeTag::Equal, &["foo", "bar"][..]),
208
+ /// (ChangeTag::Delete, &["baz"][..]),
209
+ /// (ChangeTag::Insert, &["BAZ"][..]),
210
+ /// ]);
211
+ /// ```
212
+ pub fn diff_slices<'x, T: PartialEq + Hash + Ord>(
213
+ alg: Algorithm,
214
+ old: &'x [T],
215
+ new: &'x [T],
216
+ ) -> Vec<(ChangeTag, &'x [T])> {
217
+ capture_diff_slices(alg, old, new)
218
+ .iter()
219
+ .flat_map(|op| op.iter_slices(old, new))
220
+ .collect()
221
+ }
222
+
223
+ /// Shortcut for making a character level diff.
224
+ ///
225
+ /// This function produces the diff of two strings and returns a vector
226
+ /// with the changes. It returns connected slices into the original string
227
+ /// rather than character level slices.
228
+ ///
229
+ /// ```rust
230
+ /// use similar::{Algorithm, ChangeTag};
231
+ /// use similar::utils::diff_chars;
232
+ ///
233
+ /// assert_eq!(diff_chars(Algorithm::Myers, "foobarbaz", "fooBARbaz"), vec![
234
+ /// (ChangeTag::Equal, "foo"),
235
+ /// (ChangeTag::Delete, "bar"),
236
+ /// (ChangeTag::Insert, "BAR"),
237
+ /// (ChangeTag::Equal, "baz"),
238
+ /// ]);
239
+ /// ```
240
+ pub fn diff_chars<'x, T: DiffableStrRef + ?Sized>(
241
+ alg: Algorithm,
242
+ old: &'x T,
243
+ new: &'x T,
244
+ ) -> Vec<(ChangeTag, &'x T::Output)> {
245
+ let old = old.as_diffable_str();
246
+ let new = new.as_diffable_str();
247
+ let diff = TextDiff::configure().algorithm(alg).diff_chars(old, new);
248
+ let remapper = TextDiffRemapper::from_text_diff(&diff, old, new);
249
+ diff.ops()
250
+ .iter()
251
+ .flat_map(move |x| remapper.iter_slices(x))
252
+ .collect()
253
+ }
254
+
255
+ /// Shortcut for making a word level diff.
256
+ ///
257
+ /// This function produces the diff of two strings and returns a vector
258
+ /// with the changes. It returns connected slices into the original string
259
+ /// rather than word level slices.
260
+ ///
261
+ /// ```rust
262
+ /// use similar::{Algorithm, ChangeTag};
263
+ /// use similar::utils::diff_words;
264
+ ///
265
+ /// assert_eq!(diff_words(Algorithm::Myers, "foo bar baz", "foo bor baz"), vec![
266
+ /// (ChangeTag::Equal, "foo "),
267
+ /// (ChangeTag::Delete, "bar"),
268
+ /// (ChangeTag::Insert, "bor"),
269
+ /// (ChangeTag::Equal, " baz"),
270
+ /// ]);
271
+ /// ```
272
+ pub fn diff_words<'x, T: DiffableStrRef + ?Sized>(
273
+ alg: Algorithm,
274
+ old: &'x T,
275
+ new: &'x T,
276
+ ) -> Vec<(ChangeTag, &'x T::Output)> {
277
+ let old = old.as_diffable_str();
278
+ let new = new.as_diffable_str();
279
+ let diff = TextDiff::configure().algorithm(alg).diff_words(old, new);
280
+ let remapper = TextDiffRemapper::from_text_diff(&diff, old, new);
281
+ diff.ops()
282
+ .iter()
283
+ .flat_map(move |x| remapper.iter_slices(x))
284
+ .collect()
285
+ }
286
+
287
+ /// Shortcut for making a unicode word level diff.
288
+ ///
289
+ /// This function produces the diff of two strings and returns a vector
290
+ /// with the changes. It returns connected slices into the original string
291
+ /// rather than word level slices.
292
+ ///
293
+ /// ```rust
294
+ /// use similar::{Algorithm, ChangeTag};
295
+ /// use similar::utils::diff_unicode_words;
296
+ ///
297
+ /// let old = "The quick (\"brown\") fox can't jump 32.3 feet, right?";
298
+ /// let new = "The quick (\"brown\") fox can't jump 9.84 meters, right?";
299
+ /// assert_eq!(diff_unicode_words(Algorithm::Myers, old, new), vec![
300
+ /// (ChangeTag::Equal, "The quick (\"brown\") fox can\'t jump "),
301
+ /// (ChangeTag::Delete, "32.3"),
302
+ /// (ChangeTag::Insert, "9.84"),
303
+ /// (ChangeTag::Equal, " "),
304
+ /// (ChangeTag::Delete, "feet"),
305
+ /// (ChangeTag::Insert, "meters"),
306
+ /// (ChangeTag::Equal, ", right?")
307
+ /// ]);
308
+ /// ```
309
+ ///
310
+ /// This requires the `unicode` feature.
311
+ #[cfg(feature = "unicode")]
312
+ pub fn diff_unicode_words<'x, T: DiffableStrRef + ?Sized>(
313
+ alg: Algorithm,
314
+ old: &'x T,
315
+ new: &'x T,
316
+ ) -> Vec<(ChangeTag, &'x T::Output)> {
317
+ let old = old.as_diffable_str();
318
+ let new = new.as_diffable_str();
319
+ let diff = TextDiff::configure()
320
+ .algorithm(alg)
321
+ .diff_unicode_words(old, new);
322
+ let remapper = TextDiffRemapper::from_text_diff(&diff, old, new);
323
+ diff.ops()
324
+ .iter()
325
+ .flat_map(move |x| remapper.iter_slices(x))
326
+ .collect()
327
+ }
328
+
329
+ /// Shortcut for making a grapheme level diff.
330
+ ///
331
+ /// This function produces the diff of two strings and returns a vector
332
+ /// with the changes. It returns connected slices into the original string
333
+ /// rather than grapheme level slices.
334
+ ///
335
+ /// ```rust
336
+ /// use similar::{Algorithm, ChangeTag};
337
+ /// use similar::utils::diff_graphemes;
338
+ ///
339
+ /// let old = "The flag of Austria is 🇦🇹";
340
+ /// let new = "The flag of Albania is 🇦🇱";
341
+ /// assert_eq!(diff_graphemes(Algorithm::Myers, old, new), vec![
342
+ /// (ChangeTag::Equal, "The flag of A"),
343
+ /// (ChangeTag::Delete, "ustr"),
344
+ /// (ChangeTag::Insert, "lban"),
345
+ /// (ChangeTag::Equal, "ia is "),
346
+ /// (ChangeTag::Delete, "🇦🇹"),
347
+ /// (ChangeTag::Insert, "🇦🇱"),
348
+ /// ]);
349
+ /// ```
350
+ ///
351
+ /// This requires the `unicode` feature.
352
+ #[cfg(feature = "unicode")]
353
+ pub fn diff_graphemes<'x, T: DiffableStrRef + ?Sized>(
354
+ alg: Algorithm,
355
+ old: &'x T,
356
+ new: &'x T,
357
+ ) -> Vec<(ChangeTag, &'x T::Output)> {
358
+ let old = old.as_diffable_str();
359
+ let new = new.as_diffable_str();
360
+ let diff = TextDiff::configure()
361
+ .algorithm(alg)
362
+ .diff_graphemes(old, new);
363
+ let remapper = TextDiffRemapper::from_text_diff(&diff, old, new);
364
+ diff.ops()
365
+ .iter()
366
+ .flat_map(move |x| remapper.iter_slices(x))
367
+ .collect()
368
+ }
369
+
370
+ /// Shortcut for making a line diff.
371
+ ///
372
+ /// This function produces the diff of two slices and returns a vector
373
+ /// with the changes. Unlike [`diff_chars`] or [`diff_slices`] it returns a
374
+ /// change tag for each line.
375
+ ///
376
+ /// ```rust
377
+ /// use similar::{Algorithm, ChangeTag};
378
+ /// use similar::utils::diff_lines;
379
+ ///
380
+ /// assert_eq!(diff_lines(Algorithm::Myers, "foo\nbar\nbaz\nblah", "foo\nbar\nbaz\nblurgh"), vec![
381
+ /// (ChangeTag::Equal, "foo\n"),
382
+ /// (ChangeTag::Equal, "bar\n"),
383
+ /// (ChangeTag::Equal, "baz\n"),
384
+ /// (ChangeTag::Delete, "blah"),
385
+ /// (ChangeTag::Insert, "blurgh"),
386
+ /// ]);
387
+ /// ```
388
+ pub fn diff_lines<'x, T: DiffableStrRef + ?Sized>(
389
+ alg: Algorithm,
390
+ old: &'x T,
391
+ new: &'x T,
392
+ ) -> Vec<(ChangeTag, &'x T::Output)> {
393
+ TextDiff::configure()
394
+ .algorithm(alg)
395
+ .diff_lines(old, new)
396
+ .iter_all_changes()
397
+ .map(|change| (change.tag(), change.value()))
398
+ .collect()
399
+ }
400
+
401
+ #[test]
402
+ fn test_remapper() {
403
+ let a = "foo bar baz";
404
+ let words = a.tokenize_words();
405
+ dbg!(&words);
406
+ let remap = SliceRemapper::new(a, &words);
407
+ assert_eq!(remap.slice(0..3), Some("foo bar"));
408
+ assert_eq!(remap.slice(1..3), Some(" bar"));
409
+ assert_eq!(remap.slice(0..1), Some("foo"));
410
+ assert_eq!(remap.slice(0..5), Some("foo bar baz"));
411
+ assert_eq!(remap.slice(0..6), None);
412
+ }
@@ -17,7 +17,7 @@ rb-sys = { version = "0.9.111", features = [
17
17
  magnus = { version = "0.8" }
18
18
  serde = { version = "1.0.219", features = ["derive"] }
19
19
  serde_magnus = "0.10"
20
- codeowners = { git = "https://github.com/rubyatscale/codeowners-rs.git", tag = "v0.3.2" }
20
+ codeowners = { git = "https://github.com/rubyatscale/codeowners-rs.git", tag = "v0.3.3" }
21
21
 
22
22
  [dev-dependencies]
23
23
  rb-sys = { version = "0.9.117", features = [
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module CodeOwnership
5
- VERSION = '2.1.2'
5
+ VERSION = '2.1.3'
6
6
  end