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,55 @@
1
+ use std::collections::HashMap;
2
+ use std::hash::Hash;
3
+
4
+ use super::DiffableStrRef;
5
+
6
+ // quick and dirty way to get an upper sequence ratio.
7
+ pub fn upper_seq_ratio<T: PartialEq>(seq1: &[T], seq2: &[T]) -> f32 {
8
+ let n = seq1.len() + seq2.len();
9
+ if n == 0 {
10
+ 1.0
11
+ } else {
12
+ 2.0 * seq1.len().min(seq2.len()) as f32 / n as f32
13
+ }
14
+ }
15
+
16
+ /// Internal utility to calculate an upper bound for a ratio for
17
+ /// [`get_close_matches`]. This is based on Python's difflib approach
18
+ /// of considering the two sets to be multisets.
19
+ ///
20
+ /// It counts the number of matches without regard to order, which is an
21
+ /// obvious upper bound.
22
+ pub struct QuickSeqRatio<'a, T: DiffableStrRef + ?Sized>(HashMap<&'a T, i32>);
23
+
24
+ impl<'a, T: DiffableStrRef + Hash + Eq + ?Sized> QuickSeqRatio<'a, T> {
25
+ pub fn new(seq: &[&'a T]) -> QuickSeqRatio<'a, T> {
26
+ let mut counts = HashMap::new();
27
+ for &word in seq {
28
+ *counts.entry(word).or_insert(0) += 1;
29
+ }
30
+ QuickSeqRatio(counts)
31
+ }
32
+
33
+ pub fn calc(&self, seq: &[&T]) -> f32 {
34
+ let n = self.0.len() + seq.len();
35
+ if n == 0 {
36
+ return 1.0;
37
+ }
38
+
39
+ let mut available = HashMap::new();
40
+ let mut matches = 0;
41
+ for &word in seq {
42
+ let x = if let Some(count) = available.get(&word) {
43
+ *count
44
+ } else {
45
+ self.0.get(&word).copied().unwrap_or(0)
46
+ };
47
+ available.insert(word, x - 1);
48
+ if x > 0 {
49
+ matches += 1;
50
+ }
51
+ }
52
+
53
+ 2.0 * matches as f32 / n as f32
54
+ }
55
+ }
@@ -0,0 +1,502 @@
1
+ use std::fmt;
2
+ use std::ops::{Index, Range};
3
+
4
+ use crate::algorithms::utils::is_empty_range;
5
+ use crate::algorithms::DiffHook;
6
+ use crate::iter::ChangesIter;
7
+
8
+ /// An enum representing a diffing algorithm.
9
+ #[derive(Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord, Debug)]
10
+ #[cfg_attr(
11
+ feature = "serde",
12
+ derive(serde::Serialize, serde::Deserialize),
13
+ serde(rename_all = "snake_case")
14
+ )]
15
+ pub enum Algorithm {
16
+ /// Picks the myers algorithm from [`crate::algorithms::myers`]
17
+ Myers,
18
+ /// Picks the patience algorithm from [`crate::algorithms::patience`]
19
+ Patience,
20
+ /// Picks the LCS algorithm from [`crate::algorithms::lcs`]
21
+ Lcs,
22
+ }
23
+
24
+ impl Default for Algorithm {
25
+ /// Returns the default algorithm ([`Algorithm::Myers`]).
26
+ fn default() -> Algorithm {
27
+ Algorithm::Myers
28
+ }
29
+ }
30
+
31
+ /// The tag of a change.
32
+ #[derive(Debug, PartialEq, Eq, Hash, Clone, Copy, Ord, PartialOrd)]
33
+ #[cfg_attr(
34
+ feature = "serde",
35
+ derive(serde::Serialize, serde::Deserialize),
36
+ serde(rename_all = "snake_case")
37
+ )]
38
+ pub enum ChangeTag {
39
+ /// The change indicates equality (not a change)
40
+ Equal,
41
+ /// The change indicates deleted text.
42
+ Delete,
43
+ /// The change indicates inserted text.
44
+ Insert,
45
+ }
46
+
47
+ impl fmt::Display for ChangeTag {
48
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
49
+ write!(
50
+ f,
51
+ "{}",
52
+ match &self {
53
+ ChangeTag::Equal => ' ',
54
+ ChangeTag::Delete => '-',
55
+ ChangeTag::Insert => '+',
56
+ }
57
+ )
58
+ }
59
+ }
60
+
61
+ /// Represents the expanded [`DiffOp`] change.
62
+ ///
63
+ /// This type is returned from [`DiffOp::iter_changes`] and
64
+ /// [`TextDiff::iter_changes`](crate::text::TextDiff::iter_changes).
65
+ ///
66
+ /// It exists so that it's more convenient to work with textual differences as
67
+ /// the underlying [`DiffOp`] encodes a group of changes.
68
+ ///
69
+ /// This type has additional methods that are only available for types
70
+ /// implementing [`DiffableStr`](crate::text::DiffableStr).
71
+ #[derive(Debug, PartialEq, Eq, Hash, Clone, Copy, Ord, PartialOrd)]
72
+ #[cfg_attr(feature = "serde", derive(serde::Serialize))]
73
+ pub struct Change<T> {
74
+ pub(crate) tag: ChangeTag,
75
+ pub(crate) old_index: Option<usize>,
76
+ pub(crate) new_index: Option<usize>,
77
+ pub(crate) value: T,
78
+ }
79
+
80
+ /// These methods are available for all change types.
81
+ impl<T: Clone> Change<T> {
82
+ /// Returns the change tag.
83
+ pub fn tag(&self) -> ChangeTag {
84
+ self.tag
85
+ }
86
+
87
+ /// Returns the old index if available.
88
+ pub fn old_index(&self) -> Option<usize> {
89
+ self.old_index
90
+ }
91
+
92
+ /// Returns the new index if available.
93
+ pub fn new_index(&self) -> Option<usize> {
94
+ self.new_index
95
+ }
96
+
97
+ /// Returns the underlying changed value.
98
+ ///
99
+ /// Depending on the type of the underlying [`crate::text::DiffableStr`]
100
+ /// this value is more or less useful. If you always want to have a utf-8
101
+ /// string it's best to use the [`Change::as_str`] and
102
+ /// [`Change::to_string_lossy`] methods.
103
+ pub fn value(&self) -> T {
104
+ self.value.clone()
105
+ }
106
+
107
+ /// Returns the underlying changed value as reference.
108
+ pub fn value_ref(&self) -> &T {
109
+ &self.value
110
+ }
111
+
112
+ /// Returns the underlying changed value as mutable reference.
113
+ pub fn value_mut(&mut self) -> &mut T {
114
+ &mut self.value
115
+ }
116
+ }
117
+
118
+ /// Utility enum to capture a diff operation.
119
+ ///
120
+ /// This is used by [`Capture`](crate::algorithms::Capture).
121
+ #[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
122
+ #[cfg_attr(
123
+ feature = "serde",
124
+ derive(serde::Serialize, serde::Deserialize),
125
+ serde(rename_all = "snake_case", tag = "op")
126
+ )]
127
+ pub enum DiffOp {
128
+ /// A segment is equal (see [`DiffHook::equal`])
129
+ Equal {
130
+ /// The starting index in the old sequence.
131
+ old_index: usize,
132
+ /// The starting index in the new sequence.
133
+ new_index: usize,
134
+ /// The length of the segment.
135
+ len: usize,
136
+ },
137
+ /// A segment was deleted (see [`DiffHook::delete`])
138
+ Delete {
139
+ /// The starting index in the old sequence.
140
+ old_index: usize,
141
+ /// The length of the old segment.
142
+ old_len: usize,
143
+ /// The starting index in the new sequence.
144
+ new_index: usize,
145
+ },
146
+ /// A segment was inserted (see [`DiffHook::insert`])
147
+ Insert {
148
+ /// The starting index in the old sequence.
149
+ old_index: usize,
150
+ /// The starting index in the new sequence.
151
+ new_index: usize,
152
+ /// The length of the new segment.
153
+ new_len: usize,
154
+ },
155
+ /// A segment was replaced (see [`DiffHook::replace`])
156
+ Replace {
157
+ /// The starting index in the old sequence.
158
+ old_index: usize,
159
+ /// The length of the old segment.
160
+ old_len: usize,
161
+ /// The starting index in the new sequence.
162
+ new_index: usize,
163
+ /// The length of the new segment.
164
+ new_len: usize,
165
+ },
166
+ }
167
+
168
+ /// The tag of a diff operation.
169
+ #[derive(Debug, PartialEq, Eq, Hash, Clone, Copy, Ord, PartialOrd)]
170
+ #[cfg_attr(
171
+ feature = "serde",
172
+ derive(serde::Serialize, serde::Deserialize),
173
+ serde(rename_all = "snake_case")
174
+ )]
175
+ pub enum DiffTag {
176
+ /// The diff op encodes an equal segment.
177
+ Equal,
178
+ /// The diff op encodes a deleted segment.
179
+ Delete,
180
+ /// The diff op encodes an inserted segment.
181
+ Insert,
182
+ /// The diff op encodes a replaced segment.
183
+ Replace,
184
+ }
185
+
186
+ impl DiffOp {
187
+ /// Returns the tag of the operation.
188
+ pub fn tag(self) -> DiffTag {
189
+ self.as_tag_tuple().0
190
+ }
191
+
192
+ /// Returns the old range.
193
+ pub fn old_range(&self) -> Range<usize> {
194
+ self.as_tag_tuple().1
195
+ }
196
+
197
+ /// Returns the new range.
198
+ pub fn new_range(&self) -> Range<usize> {
199
+ self.as_tag_tuple().2
200
+ }
201
+
202
+ /// Transform the op into a tuple of diff tag and ranges.
203
+ ///
204
+ /// This is useful when operating on slices. The returned format is
205
+ /// `(tag, i1..i2, j1..j2)`:
206
+ ///
207
+ /// * `Replace`: `a[i1..i2]` should be replaced by `b[j1..j2]`
208
+ /// * `Delete`: `a[i1..i2]` should be deleted (`j1 == j2` in this case).
209
+ /// * `Insert`: `b[j1..j2]` should be inserted at `a[i1..i2]` (`i1 == i2` in this case).
210
+ /// * `Equal`: `a[i1..i2]` is equal to `b[j1..j2]`.
211
+ pub fn as_tag_tuple(&self) -> (DiffTag, Range<usize>, Range<usize>) {
212
+ match *self {
213
+ DiffOp::Equal {
214
+ old_index,
215
+ new_index,
216
+ len,
217
+ } => (
218
+ DiffTag::Equal,
219
+ old_index..old_index + len,
220
+ new_index..new_index + len,
221
+ ),
222
+ DiffOp::Delete {
223
+ old_index,
224
+ new_index,
225
+ old_len,
226
+ } => (
227
+ DiffTag::Delete,
228
+ old_index..old_index + old_len,
229
+ new_index..new_index,
230
+ ),
231
+ DiffOp::Insert {
232
+ old_index,
233
+ new_index,
234
+ new_len,
235
+ } => (
236
+ DiffTag::Insert,
237
+ old_index..old_index,
238
+ new_index..new_index + new_len,
239
+ ),
240
+ DiffOp::Replace {
241
+ old_index,
242
+ old_len,
243
+ new_index,
244
+ new_len,
245
+ } => (
246
+ DiffTag::Replace,
247
+ old_index..old_index + old_len,
248
+ new_index..new_index + new_len,
249
+ ),
250
+ }
251
+ }
252
+
253
+ /// Apply this operation to a diff hook.
254
+ pub fn apply_to_hook<D: DiffHook>(&self, d: &mut D) -> Result<(), D::Error> {
255
+ match *self {
256
+ DiffOp::Equal {
257
+ old_index,
258
+ new_index,
259
+ len,
260
+ } => d.equal(old_index, new_index, len),
261
+ DiffOp::Delete {
262
+ old_index,
263
+ old_len,
264
+ new_index,
265
+ } => d.delete(old_index, old_len, new_index),
266
+ DiffOp::Insert {
267
+ old_index,
268
+ new_index,
269
+ new_len,
270
+ } => d.insert(old_index, new_index, new_len),
271
+ DiffOp::Replace {
272
+ old_index,
273
+ old_len,
274
+ new_index,
275
+ new_len,
276
+ } => d.replace(old_index, old_len, new_index, new_len),
277
+ }
278
+ }
279
+
280
+ /// Iterates over all changes encoded in the diff op against old and new
281
+ /// sequences.
282
+ ///
283
+ /// `old` and `new` are two indexable objects like the types you pass to
284
+ /// the diffing algorithm functions.
285
+ ///
286
+ /// ```rust
287
+ /// use similar::{ChangeTag, Algorithm};
288
+ /// use similar::capture_diff_slices;
289
+ /// let old = vec!["foo", "bar", "baz"];
290
+ /// let new = vec!["foo", "bar", "blah"];
291
+ /// let ops = capture_diff_slices(Algorithm::Myers, &old, &new);
292
+ /// let changes: Vec<_> = ops
293
+ /// .iter()
294
+ /// .flat_map(|x| x.iter_changes(&old, &new))
295
+ /// .map(|x| (x.tag(), x.value()))
296
+ /// .collect();
297
+ /// assert_eq!(changes, vec![
298
+ /// (ChangeTag::Equal, "foo"),
299
+ /// (ChangeTag::Equal, "bar"),
300
+ /// (ChangeTag::Delete, "baz"),
301
+ /// (ChangeTag::Insert, "blah"),
302
+ /// ]);
303
+ /// ```
304
+ pub fn iter_changes<'lookup, Old, New, T>(
305
+ &self,
306
+ old: &'lookup Old,
307
+ new: &'lookup New,
308
+ ) -> ChangesIter<'lookup, Old, New, T>
309
+ where
310
+ Old: Index<usize, Output = T> + ?Sized,
311
+ New: Index<usize, Output = T> + ?Sized,
312
+ {
313
+ ChangesIter::new(old, new, *self)
314
+ }
315
+
316
+ /// Given a diffop yields the changes it encodes against the given slices.
317
+ ///
318
+ /// This is similar to [`DiffOp::iter_changes`] but instead of yielding the
319
+ /// individual changes it yields consequitive changed slices.
320
+ ///
321
+ /// This will only ever yield a single tuple or two tuples in case a
322
+ /// [`DiffOp::Replace`] operation is passed.
323
+ ///
324
+ /// ```rust
325
+ /// use similar::{ChangeTag, Algorithm};
326
+ /// use similar::capture_diff_slices;
327
+ /// let old = vec!["foo", "bar", "baz"];
328
+ /// let new = vec!["foo", "bar", "blah"];
329
+ /// let ops = capture_diff_slices(Algorithm::Myers, &old, &new);
330
+ /// let changes: Vec<_> = ops.iter().flat_map(|x| x.iter_slices(&old, &new)).collect();
331
+ /// assert_eq!(changes, vec![
332
+ /// (ChangeTag::Equal, &["foo", "bar"][..]),
333
+ /// (ChangeTag::Delete, &["baz"][..]),
334
+ /// (ChangeTag::Insert, &["blah"][..]),
335
+ /// ]);
336
+ /// ```
337
+ ///
338
+ /// Due to lifetime restrictions it's currently impossible for the
339
+ /// returned slices to outlive the lookup.
340
+ pub fn iter_slices<'lookup, Old, New, T>(
341
+ &self,
342
+ old: &'lookup Old,
343
+ new: &'lookup New,
344
+ ) -> impl Iterator<Item = (ChangeTag, &'lookup T)>
345
+ where
346
+ T: 'lookup + ?Sized,
347
+ Old: Index<Range<usize>, Output = T> + ?Sized,
348
+ New: Index<Range<usize>, Output = T> + ?Sized,
349
+ {
350
+ match *self {
351
+ DiffOp::Equal { old_index, len, .. } => {
352
+ Some((ChangeTag::Equal, &old[old_index..old_index + len]))
353
+ .into_iter()
354
+ .chain(None)
355
+ }
356
+ DiffOp::Insert {
357
+ new_index, new_len, ..
358
+ } => Some((ChangeTag::Insert, &new[new_index..new_index + new_len]))
359
+ .into_iter()
360
+ .chain(None),
361
+ DiffOp::Delete {
362
+ old_index, old_len, ..
363
+ } => Some((ChangeTag::Delete, &old[old_index..old_index + old_len]))
364
+ .into_iter()
365
+ .chain(None),
366
+ DiffOp::Replace {
367
+ old_index,
368
+ old_len,
369
+ new_index,
370
+ new_len,
371
+ } => Some((ChangeTag::Delete, &old[old_index..old_index + old_len]))
372
+ .into_iter()
373
+ .chain(Some((
374
+ ChangeTag::Insert,
375
+ &new[new_index..new_index + new_len],
376
+ ))),
377
+ }
378
+ }
379
+
380
+ pub(crate) fn is_empty(&self) -> bool {
381
+ let (_, old, new) = self.as_tag_tuple();
382
+ is_empty_range(&old) && is_empty_range(&new)
383
+ }
384
+
385
+ pub(crate) fn shift_left(&mut self, adjust: usize) {
386
+ self.adjust((adjust, true), (0, false));
387
+ }
388
+
389
+ pub(crate) fn shift_right(&mut self, adjust: usize) {
390
+ self.adjust((adjust, false), (0, false));
391
+ }
392
+
393
+ pub(crate) fn grow_left(&mut self, adjust: usize) {
394
+ self.adjust((adjust, true), (adjust, false));
395
+ }
396
+
397
+ pub(crate) fn grow_right(&mut self, adjust: usize) {
398
+ self.adjust((0, false), (adjust, false));
399
+ }
400
+
401
+ pub(crate) fn shrink_left(&mut self, adjust: usize) {
402
+ self.adjust((0, false), (adjust, true));
403
+ }
404
+
405
+ pub(crate) fn shrink_right(&mut self, adjust: usize) {
406
+ self.adjust((adjust, false), (adjust, true));
407
+ }
408
+
409
+ fn adjust(&mut self, adjust_offset: (usize, bool), adjust_len: (usize, bool)) {
410
+ #[inline(always)]
411
+ fn modify(val: &mut usize, adj: (usize, bool)) {
412
+ if adj.1 {
413
+ *val -= adj.0;
414
+ } else {
415
+ *val += adj.0;
416
+ }
417
+ }
418
+
419
+ match self {
420
+ DiffOp::Equal {
421
+ old_index,
422
+ new_index,
423
+ len,
424
+ } => {
425
+ modify(old_index, adjust_offset);
426
+ modify(new_index, adjust_offset);
427
+ modify(len, adjust_len);
428
+ }
429
+ DiffOp::Delete {
430
+ old_index,
431
+ old_len,
432
+ new_index,
433
+ } => {
434
+ modify(old_index, adjust_offset);
435
+ modify(old_len, adjust_len);
436
+ modify(new_index, adjust_offset);
437
+ }
438
+ DiffOp::Insert {
439
+ old_index,
440
+ new_index,
441
+ new_len,
442
+ } => {
443
+ modify(old_index, adjust_offset);
444
+ modify(new_index, adjust_offset);
445
+ modify(new_len, adjust_len);
446
+ }
447
+ DiffOp::Replace {
448
+ old_index,
449
+ old_len,
450
+ new_index,
451
+ new_len,
452
+ } => {
453
+ modify(old_index, adjust_offset);
454
+ modify(old_len, adjust_len);
455
+ modify(new_index, adjust_offset);
456
+ modify(new_len, adjust_len);
457
+ }
458
+ }
459
+ }
460
+ }
461
+
462
+ #[cfg(feature = "text")]
463
+ mod text_additions {
464
+ use super::*;
465
+ use crate::text::DiffableStr;
466
+ use std::borrow::Cow;
467
+
468
+ /// The text interface can produce changes over [`DiffableStr`] implementing
469
+ /// values. As those are generic interfaces for different types of strings
470
+ /// utility methods to make working with standard rust strings more enjoyable.
471
+ impl<'s, T: DiffableStr + ?Sized> Change<&'s T> {
472
+ /// Returns the value as string if it is utf-8.
473
+ pub fn as_str(&self) -> Option<&'s str> {
474
+ T::as_str(self.value)
475
+ }
476
+
477
+ /// Returns the value (lossy) decoded as utf-8 string.
478
+ pub fn to_string_lossy(&self) -> Cow<'s, str> {
479
+ T::to_string_lossy(self.value)
480
+ }
481
+
482
+ /// Returns `true` if this change does not end in a newline and must be
483
+ /// followed up by one if line based diffs are used.
484
+ ///
485
+ /// The [`std::fmt::Display`] implementation of [`Change`] will automatically
486
+ /// insert a newline after the value if this is true.
487
+ pub fn missing_newline(&self) -> bool {
488
+ !T::ends_with_newline(self.value)
489
+ }
490
+ }
491
+
492
+ impl<T: DiffableStr + ?Sized> fmt::Display for Change<&T> {
493
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
494
+ write!(
495
+ f,
496
+ "{}{}",
497
+ self.to_string_lossy(),
498
+ if self.missing_newline() { "\n" } else { "" }
499
+ )
500
+ }
501
+ }
502
+ }