smorg-rb 7.1.1 → 7.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +2 -10
- data/lib/smorg/rb/version.rb +1 -1
- data/lib/smorg/rb.rb +254 -135
- data.tar.gz.sig +0 -0
- metadata +160 -28
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e7aa889fb625e2e139a19101b23291fd91f8bfec64fdfb11f8c4635265a400aa
|
|
4
|
+
data.tar.gz: c5fbedc4b98a1e50822e67516e61e6172a8f28111e3b516d0388e3e417e85163
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cf8b2baf7de0ce383932a0278d6e7f1cf44d7ca08cc15715c713f06792ab1ff90e12b0d7d30b4265d00b02ba3a1d90930a64d6a0dfa7b5e353612dd4824bf47c
|
|
7
|
+
data.tar.gz: 9de42f40bab39d40d17d6ee3c1d6a2e899621cb2503ce478e87e859a5ac25c233d146fd17af0029c6c18292f2481fe69d305eae8ad775d7fbd053227ba9ed08c
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/README.md
CHANGED
|
@@ -45,7 +45,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
45
45
|
|
|
46
46
|
### Compatibility
|
|
47
47
|
|
|
48
|
-
Compatible with MRI Ruby 4.0.0+,
|
|
48
|
+
Compatible with MRI Ruby 4.0.0+, JRuby, and TruffleRuby.
|
|
49
49
|
CI workflows and Appraisals are generated for MRI Ruby 4.0.0+.
|
|
50
50
|
This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
51
51
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
@@ -108,20 +108,12 @@ See [SECURITY.md][🔐security].
|
|
|
108
108
|
## 🤝 Contributing
|
|
109
109
|
|
|
110
110
|
If you need some ideas of where to help, you could work on adding more code coverage,
|
|
111
|
-
|
|
112
|
-
or use the gem and think about how it could be better.
|
|
111
|
+
check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
|
|
113
112
|
|
|
114
113
|
We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
|
|
115
114
|
|
|
116
115
|
See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
|
|
117
116
|
|
|
118
|
-
### Code Coverage
|
|
119
|
-
|
|
120
|
-
<details markdown="1">
|
|
121
|
-
<summary>Coverage service badges</summary>
|
|
122
|
-
|
|
123
|
-
</details>
|
|
124
|
-
|
|
125
117
|
## 📌 Versioning
|
|
126
118
|
|
|
127
119
|
This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
|
data/lib/smorg/rb/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Smorg
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = '7.1.
|
|
8
|
+
VERSION = '7.1.3'
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data/lib/smorg/rb.rb
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'English'
|
|
4
|
+
require 'bash/merge'
|
|
4
5
|
require 'go-merge'
|
|
6
|
+
require 'html/merge'
|
|
5
7
|
require 'ast/merge'
|
|
6
8
|
require 'ast-merge-git'
|
|
7
9
|
require 'diff/lcs'
|
|
8
10
|
require 'diff/lcs/hunk'
|
|
11
|
+
require 'dotenv/merge'
|
|
9
12
|
require 'json'
|
|
10
13
|
require 'json-merge'
|
|
11
14
|
require 'kettle/jem'
|
|
12
15
|
require 'kettle/jem/tasks/install_task'
|
|
13
|
-
require '
|
|
16
|
+
require 'markdown/merge'
|
|
14
17
|
require 'plain-merge'
|
|
18
|
+
require 'rbs/merge'
|
|
19
|
+
require 'ruby/merge'
|
|
20
|
+
require 'toml/merge'
|
|
21
|
+
require 'typescript/merge'
|
|
22
|
+
require 'yaml/merge'
|
|
15
23
|
require_relative 'rb/version'
|
|
16
24
|
|
|
17
25
|
module Smorg
|
|
@@ -438,7 +446,8 @@ module Smorg
|
|
|
438
446
|
path_name: path_name,
|
|
439
447
|
ok: ok,
|
|
440
448
|
exit_code: exit_code,
|
|
441
|
-
fallbacks: fallbacks,
|
|
449
|
+
fallbacks: result.fetch(:fallbacks, []) + fallbacks,
|
|
450
|
+
conflicts: result.fetch(:conflicts, []),
|
|
442
451
|
change_classifications: result.fetch(:change_classifications, []),
|
|
443
452
|
owned_regions: result.fetch(:owned_regions, []),
|
|
444
453
|
render_report: result[:render_report],
|
|
@@ -447,6 +456,8 @@ module Smorg
|
|
|
447
456
|
secondary_formatting_metrics: result[:secondary_formatting_metrics],
|
|
448
457
|
default_driver_evaluation: result[:default_driver_evaluation],
|
|
449
458
|
profile: result[:profile],
|
|
459
|
+
provider: result[:provider],
|
|
460
|
+
verification: result[:verification],
|
|
450
461
|
diagnostics: result.fetch(:diagnostics, [])
|
|
451
462
|
}
|
|
452
463
|
File.write(report_path, "#{JSON.pretty_generate(Ast::Merge.json_ready(report))}\n")
|
|
@@ -632,12 +643,27 @@ module Smorg
|
|
|
632
643
|
end
|
|
633
644
|
|
|
634
645
|
[
|
|
646
|
+
'*.bash merge=smorg-rb diff=smorg-rb smorg.language=bash',
|
|
635
647
|
'*.go merge=smorg-rb diff=smorg-rb smorg.language=go',
|
|
648
|
+
'*.htm merge=smorg-rb diff=smorg-rb smorg.language=html',
|
|
649
|
+
'*.html merge=smorg-rb diff=smorg-rb smorg.language=html',
|
|
650
|
+
'*.env merge=smorg-rb diff=smorg-rb smorg.language=dotenv',
|
|
651
|
+
'.env merge=smorg-rb diff=smorg-rb smorg.language=dotenv',
|
|
652
|
+
'.env.* merge=smorg-rb diff=smorg-rb smorg.language=dotenv',
|
|
636
653
|
'*.json merge=smorg-rb diff=smorg-rb smorg.language=json',
|
|
637
654
|
'*.jsonc merge=smorg-rb diff=smorg-rb smorg.language=jsonc',
|
|
638
655
|
'*.json5 merge=smorg-rb diff=smorg-rb smorg.language=json5',
|
|
639
656
|
'*.md merge=smorg-rb diff=smorg-rb smorg.language=markdown',
|
|
640
|
-
'*.markdown merge=smorg-rb diff=smorg-rb smorg.language=markdown'
|
|
657
|
+
'*.markdown merge=smorg-rb diff=smorg-rb smorg.language=markdown',
|
|
658
|
+
'*.rb merge=smorg-rb diff=smorg-rb smorg.language=ruby',
|
|
659
|
+
'*.rbs merge=smorg-rb diff=smorg-rb smorg.language=rbs',
|
|
660
|
+
'*.rs merge=smorg-rb diff=smorg-rb smorg.language=rust',
|
|
661
|
+
'*.sh merge=smorg-rb diff=smorg-rb smorg.language=bash',
|
|
662
|
+
'*.toml merge=smorg-rb diff=smorg-rb smorg.language=toml',
|
|
663
|
+
'*.ts merge=smorg-rb diff=smorg-rb smorg.language=typescript',
|
|
664
|
+
'*.tsx merge=smorg-rb diff=smorg-rb smorg.language=tsx',
|
|
665
|
+
'*.yml merge=smorg-rb diff=smorg-rb smorg.language=yaml',
|
|
666
|
+
'*.yaml merge=smorg-rb diff=smorg-rb smorg.language=yaml'
|
|
641
667
|
].each { |line| stdout.puts(line) }
|
|
642
668
|
EXIT_SUCCESS
|
|
643
669
|
end
|
|
@@ -645,151 +671,215 @@ module Smorg
|
|
|
645
671
|
def merge_by_path(path_name, language, conflict_marker_size, fallback_policy, ancestor_source, current_source,
|
|
646
672
|
other_source)
|
|
647
673
|
case normalize_language(language, path_name)
|
|
674
|
+
when 'bash'
|
|
675
|
+
merge3_result(
|
|
676
|
+
Ast::Merge::Git.merge3(
|
|
677
|
+
base_source: ancestor_source,
|
|
678
|
+
ours_source: current_source,
|
|
679
|
+
theirs_source: other_source,
|
|
680
|
+
path_name: path_name,
|
|
681
|
+
provider_id: 'ruby.bash',
|
|
682
|
+
family: 'bash',
|
|
683
|
+
dialect: 'bash',
|
|
684
|
+
backend: 'kreuzberg-language-pack',
|
|
685
|
+
profile_id: 'source_preserving',
|
|
686
|
+
fallback_policy: fallback_policy,
|
|
687
|
+
conflict_marker_size: conflict_marker_size
|
|
688
|
+
)
|
|
689
|
+
)
|
|
648
690
|
when 'go'
|
|
649
|
-
Go::Merge.merge_go(other_source, current_source, 'go')
|
|
650
|
-
when 'json'
|
|
651
691
|
merge3_result(
|
|
652
692
|
Ast::Merge::Git.merge3(
|
|
653
693
|
base_source: ancestor_source,
|
|
654
694
|
ours_source: current_source,
|
|
655
695
|
theirs_source: other_source,
|
|
656
696
|
path_name: path_name,
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
697
|
+
provider_id: 'ruby.go',
|
|
698
|
+
family: 'go',
|
|
699
|
+
dialect: 'go',
|
|
700
|
+
backend: 'kreuzberg-language-pack',
|
|
701
|
+
profile_id: 'source_preserving',
|
|
660
702
|
fallback_policy: fallback_policy,
|
|
661
|
-
conflict_marker_size: conflict_marker_size
|
|
662
|
-
|
|
703
|
+
conflict_marker_size: conflict_marker_size
|
|
704
|
+
)
|
|
705
|
+
)
|
|
706
|
+
when 'html'
|
|
707
|
+
merge3_result(
|
|
708
|
+
Ast::Merge::Git.merge3(
|
|
709
|
+
base_source: ancestor_source,
|
|
710
|
+
ours_source: current_source,
|
|
711
|
+
theirs_source: other_source,
|
|
712
|
+
path_name: path_name,
|
|
713
|
+
provider_id: 'ruby.html',
|
|
714
|
+
family: 'html',
|
|
715
|
+
dialect: 'html',
|
|
716
|
+
backend: 'kreuzberg-language-pack',
|
|
717
|
+
profile_id: 'source_preserving',
|
|
718
|
+
fallback_policy: fallback_policy,
|
|
719
|
+
conflict_marker_size: conflict_marker_size
|
|
720
|
+
)
|
|
721
|
+
)
|
|
722
|
+
when 'dotenv'
|
|
723
|
+
merge3_result(
|
|
724
|
+
Ast::Merge::Git.merge3(
|
|
725
|
+
base_source: ancestor_source,
|
|
726
|
+
ours_source: current_source,
|
|
727
|
+
theirs_source: other_source,
|
|
728
|
+
path_name: path_name,
|
|
729
|
+
family: 'dotenv',
|
|
730
|
+
dialect: 'dotenv',
|
|
731
|
+
backend: 'dotenv-line',
|
|
732
|
+
profile_id: 'source_preserving',
|
|
733
|
+
fallback_policy: fallback_policy,
|
|
734
|
+
conflict_marker_size: conflict_marker_size
|
|
735
|
+
)
|
|
736
|
+
)
|
|
737
|
+
when 'json', 'jsonc', 'json5'
|
|
738
|
+
merge3_result(
|
|
739
|
+
Ast::Merge::Git.merge3(
|
|
740
|
+
base_source: ancestor_source,
|
|
741
|
+
ours_source: current_source,
|
|
742
|
+
theirs_source: other_source,
|
|
743
|
+
path_name: path_name,
|
|
744
|
+
family: 'json',
|
|
745
|
+
dialect: normalize_language(language, path_name),
|
|
746
|
+
profile_id: 'source_preserving',
|
|
747
|
+
fallback_policy: fallback_policy,
|
|
748
|
+
conflict_marker_size: conflict_marker_size
|
|
663
749
|
)
|
|
664
750
|
)
|
|
665
|
-
when 'jsonc'
|
|
666
|
-
Json::Merge.merge_json(other_source, current_source, 'jsonc')
|
|
667
|
-
when 'json5'
|
|
668
|
-
Json::Merge.merge_json(other_source, current_source, 'json5')
|
|
669
751
|
when 'markdown'
|
|
670
|
-
|
|
752
|
+
merge3_result(
|
|
753
|
+
Ast::Merge::Git.merge3(
|
|
754
|
+
base_source: ancestor_source,
|
|
755
|
+
ours_source: current_source,
|
|
756
|
+
theirs_source: other_source,
|
|
757
|
+
path_name: path_name,
|
|
758
|
+
provider_id: 'ruby.markdown',
|
|
759
|
+
family: 'markdown',
|
|
760
|
+
dialect: 'markdown',
|
|
761
|
+
backend: 'kreuzberg-language-pack',
|
|
762
|
+
profile_id: 'source_preserving',
|
|
763
|
+
fallback_policy: fallback_policy,
|
|
764
|
+
conflict_marker_size: conflict_marker_size
|
|
765
|
+
)
|
|
766
|
+
)
|
|
767
|
+
when 'ruby'
|
|
768
|
+
merge3_result(
|
|
769
|
+
Ast::Merge::Git.merge3(
|
|
770
|
+
base_source: ancestor_source,
|
|
771
|
+
ours_source: current_source,
|
|
772
|
+
theirs_source: other_source,
|
|
773
|
+
path_name: path_name,
|
|
774
|
+
provider_id: 'ruby.ruby',
|
|
775
|
+
family: 'ruby',
|
|
776
|
+
dialect: 'ruby',
|
|
777
|
+
backend: 'prism',
|
|
778
|
+
profile_id: 'source_preserving',
|
|
779
|
+
fallback_policy: fallback_policy,
|
|
780
|
+
conflict_marker_size: conflict_marker_size
|
|
781
|
+
)
|
|
782
|
+
)
|
|
783
|
+
when 'rbs'
|
|
784
|
+
merge3_result(
|
|
785
|
+
Ast::Merge::Git.merge3(
|
|
786
|
+
base_source: ancestor_source,
|
|
787
|
+
ours_source: current_source,
|
|
788
|
+
theirs_source: other_source,
|
|
789
|
+
path_name: path_name,
|
|
790
|
+
provider_id: 'ruby.rbs',
|
|
791
|
+
family: 'rbs',
|
|
792
|
+
dialect: 'rbs',
|
|
793
|
+
backend: 'rbs',
|
|
794
|
+
profile_id: 'source_preserving',
|
|
795
|
+
fallback_policy: fallback_policy,
|
|
796
|
+
conflict_marker_size: conflict_marker_size
|
|
797
|
+
)
|
|
798
|
+
)
|
|
799
|
+
when 'rust'
|
|
800
|
+
merge3_result(
|
|
801
|
+
Ast::Merge::Git.merge3(
|
|
802
|
+
base_source: ancestor_source,
|
|
803
|
+
ours_source: current_source,
|
|
804
|
+
theirs_source: other_source,
|
|
805
|
+
path_name: path_name,
|
|
806
|
+
provider_id: 'ruby.rust',
|
|
807
|
+
family: 'rust',
|
|
808
|
+
dialect: 'rust',
|
|
809
|
+
backend: 'kreuzberg-language-pack',
|
|
810
|
+
profile_id: 'source_preserving',
|
|
811
|
+
fallback_policy: fallback_policy,
|
|
812
|
+
conflict_marker_size: conflict_marker_size
|
|
813
|
+
)
|
|
814
|
+
)
|
|
815
|
+
when 'toml'
|
|
816
|
+
merge3_result(
|
|
817
|
+
Ast::Merge::Git.merge3(
|
|
818
|
+
base_source: ancestor_source,
|
|
819
|
+
ours_source: current_source,
|
|
820
|
+
theirs_source: other_source,
|
|
821
|
+
path_name: path_name,
|
|
822
|
+
provider_id: 'ruby.toml',
|
|
823
|
+
family: 'toml',
|
|
824
|
+
dialect: 'toml',
|
|
825
|
+
backend: 'kreuzberg-language-pack',
|
|
826
|
+
profile_id: 'source_preserving',
|
|
827
|
+
fallback_policy: fallback_policy,
|
|
828
|
+
conflict_marker_size: conflict_marker_size
|
|
829
|
+
)
|
|
830
|
+
)
|
|
831
|
+
when 'typescript', 'tsx'
|
|
832
|
+
dialect = normalize_language(language, path_name)
|
|
833
|
+
merge3_result(
|
|
834
|
+
Ast::Merge::Git.merge3(
|
|
835
|
+
base_source: ancestor_source,
|
|
836
|
+
ours_source: current_source,
|
|
837
|
+
theirs_source: other_source,
|
|
838
|
+
path_name: path_name,
|
|
839
|
+
provider_id: 'ruby.typescript',
|
|
840
|
+
family: 'typescript',
|
|
841
|
+
dialect: dialect,
|
|
842
|
+
backend: 'kreuzberg-language-pack',
|
|
843
|
+
profile_id: 'source_preserving',
|
|
844
|
+
fallback_policy: fallback_policy,
|
|
845
|
+
conflict_marker_size: conflict_marker_size
|
|
846
|
+
)
|
|
847
|
+
)
|
|
848
|
+
when 'yaml'
|
|
849
|
+
merge3_result(
|
|
850
|
+
Ast::Merge::Git.merge3(
|
|
851
|
+
base_source: ancestor_source,
|
|
852
|
+
ours_source: current_source,
|
|
853
|
+
theirs_source: other_source,
|
|
854
|
+
path_name: path_name,
|
|
855
|
+
provider_id: 'ruby.yaml',
|
|
856
|
+
family: 'yaml',
|
|
857
|
+
dialect: 'yaml',
|
|
858
|
+
backend: 'kreuzberg-language-pack',
|
|
859
|
+
profile_id: 'source_preserving',
|
|
860
|
+
fallback_policy: fallback_policy,
|
|
861
|
+
conflict_marker_size: conflict_marker_size
|
|
862
|
+
)
|
|
863
|
+
)
|
|
671
864
|
when 'text'
|
|
672
|
-
|
|
865
|
+
merge3_result(
|
|
866
|
+
Ast::Merge::Git.merge3(
|
|
867
|
+
base_source: ancestor_source,
|
|
868
|
+
ours_source: current_source,
|
|
869
|
+
theirs_source: other_source,
|
|
870
|
+
path_name: path_name,
|
|
871
|
+
family: 'text',
|
|
872
|
+
dialect: 'text',
|
|
873
|
+
profile_id: 'coarse_document',
|
|
874
|
+
fallback_policy: fallback_policy,
|
|
875
|
+
conflict_marker_size: conflict_marker_size
|
|
876
|
+
)
|
|
877
|
+
)
|
|
673
878
|
else
|
|
674
879
|
unsupported_language_result(normalize_language(language, path_name), path_name)
|
|
675
880
|
end
|
|
676
881
|
end
|
|
677
882
|
|
|
678
|
-
def merge_markdown(ancestor_source, current_source, other_source)
|
|
679
|
-
return { ok: true, diagnostics: [], output: current_source, policies: [] } if other_source == ancestor_source
|
|
680
|
-
return { ok: true, diagnostics: [], output: other_source, policies: [] } if current_source == ancestor_source
|
|
681
|
-
if markdown_theirs_changes_already_present?(ancestor_source, current_source, other_source)
|
|
682
|
-
return { ok: true, diagnostics: [], output: current_source, policies: [] }
|
|
683
|
-
end
|
|
684
|
-
|
|
685
|
-
result = Markly::Merge::SmartMerger.new(
|
|
686
|
-
other_source,
|
|
687
|
-
current_source,
|
|
688
|
-
add_template_only_nodes: true,
|
|
689
|
-
inner_merge_code_blocks: true,
|
|
690
|
-
inner_merge_lists: true,
|
|
691
|
-
normalize_whitespace: :basic
|
|
692
|
-
).merge_result
|
|
693
|
-
{
|
|
694
|
-
ok: result.success?,
|
|
695
|
-
diagnostics: result.conflicts.map do |conflict|
|
|
696
|
-
{
|
|
697
|
-
severity: 'error',
|
|
698
|
-
category: 'merge_conflict',
|
|
699
|
-
message: conflict[:message] || conflict[:reason] || 'unresolved Markdown conflict'
|
|
700
|
-
}
|
|
701
|
-
end,
|
|
702
|
-
output: result.content,
|
|
703
|
-
policies: []
|
|
704
|
-
}
|
|
705
|
-
rescue Markdown::Merge::ParseError => e
|
|
706
|
-
{
|
|
707
|
-
ok: false,
|
|
708
|
-
diagnostics: [{ severity: 'error', category: 'parse_error', message: e.message }],
|
|
709
|
-
policies: []
|
|
710
|
-
}
|
|
711
|
-
rescue StandardError => e
|
|
712
|
-
{
|
|
713
|
-
ok: false,
|
|
714
|
-
diagnostics: [{ severity: 'error', category: 'merge_error', message: e.message }],
|
|
715
|
-
policies: []
|
|
716
|
-
}
|
|
717
|
-
end
|
|
718
|
-
|
|
719
|
-
def markdown_theirs_changes_already_present?(ancestor_source, current_source, other_source)
|
|
720
|
-
ancestor_sections = markdown_sections(ancestor_source)
|
|
721
|
-
current_sections = markdown_sections(current_source)
|
|
722
|
-
other_sections = markdown_sections(other_source)
|
|
723
|
-
return false unless ancestor_sections && current_sections && other_sections
|
|
724
|
-
|
|
725
|
-
ancestor_by_path = sections_by_path(ancestor_sections)
|
|
726
|
-
ancestor_by_heading = sections_by_heading(ancestor_sections)
|
|
727
|
-
current_by_path = sections_by_path(current_sections)
|
|
728
|
-
current_by_heading = sections_by_heading(current_sections)
|
|
729
|
-
|
|
730
|
-
changed_sections = other_sections.filter do |section|
|
|
731
|
-
ancestor_text = ancestor_by_path[section[:path]] || ancestor_by_heading[markdown_heading_key(section[:text])]
|
|
732
|
-
ancestor_text != section[:text]
|
|
733
|
-
end
|
|
734
|
-
return false if changed_sections.empty?
|
|
735
|
-
|
|
736
|
-
changed_sections.all? do |section|
|
|
737
|
-
other_text = section[:text]
|
|
738
|
-
heading_key = markdown_heading_key(other_text)
|
|
739
|
-
ancestor_text = ancestor_by_heading[heading_key] || ancestor_by_path.fetch(section[:path], '')
|
|
740
|
-
current_text = current_by_heading[heading_key] || current_by_path[section[:path]]
|
|
741
|
-
next false unless current_text
|
|
742
|
-
|
|
743
|
-
introduced_tokens = markdown_significant_tokens(other_text) - markdown_significant_tokens(ancestor_text)
|
|
744
|
-
!introduced_tokens.empty? && introduced_tokens.subset?(markdown_significant_tokens(current_text))
|
|
745
|
-
end
|
|
746
|
-
end
|
|
747
|
-
|
|
748
|
-
def markdown_sections(source)
|
|
749
|
-
parsed = Markly::Merge.parse_markdown(source, 'markdown')
|
|
750
|
-
return nil unless parsed[:ok]
|
|
751
|
-
|
|
752
|
-
Markdown::Merge.collect_markdown_sections(
|
|
753
|
-
parsed.dig(:analysis, :normalized_source),
|
|
754
|
-
parsed.dig(:analysis, :owners)
|
|
755
|
-
)
|
|
756
|
-
end
|
|
757
|
-
|
|
758
|
-
def sections_by_path(sections)
|
|
759
|
-
sections.to_h { |section| [section[:path], section[:text]] }
|
|
760
|
-
end
|
|
761
|
-
|
|
762
|
-
def sections_by_heading(sections)
|
|
763
|
-
sections.each_with_object({}) do |section, map|
|
|
764
|
-
key = markdown_heading_key(section[:text])
|
|
765
|
-
map[key] ||= section[:text] unless key.empty?
|
|
766
|
-
end
|
|
767
|
-
end
|
|
768
|
-
|
|
769
|
-
def markdown_heading_key(section_text)
|
|
770
|
-
heading = section_text.each_line.find { |line| line.start_with?('#') }.to_s.strip
|
|
771
|
-
heading = heading.delete_prefix('#').strip while heading.start_with?('#')
|
|
772
|
-
heading.downcase
|
|
773
|
-
end
|
|
774
|
-
|
|
775
|
-
def markdown_significant_tokens(source)
|
|
776
|
-
source.split.each_with_object(Set.new) do |raw_token, tokens|
|
|
777
|
-
token = normalize_markdown_token(raw_token)
|
|
778
|
-
tokens << token if token.length >= 8
|
|
779
|
-
end
|
|
780
|
-
end
|
|
781
|
-
|
|
782
|
-
def normalize_markdown_token(raw_token)
|
|
783
|
-
token = raw_token.downcase
|
|
784
|
-
loop do
|
|
785
|
-
previous = token
|
|
786
|
-
token = token.delete_prefix('(').delete_prefix('[').delete_prefix('{').delete_prefix('<')
|
|
787
|
-
token = token.delete_suffix(')').delete_suffix(']').delete_suffix('}').delete_suffix('>')
|
|
788
|
-
token = token.delete_suffix('.').delete_suffix(',').delete_suffix(';').delete_suffix(':')
|
|
789
|
-
return token if token == previous
|
|
790
|
-
end
|
|
791
|
-
end
|
|
792
|
-
|
|
793
883
|
def unsupported_language_result(language, path_name)
|
|
794
884
|
{
|
|
795
885
|
ok: false,
|
|
@@ -807,10 +897,10 @@ module Smorg
|
|
|
807
897
|
def merge3_result(result)
|
|
808
898
|
merge3_report_fields = {
|
|
809
899
|
change_classifications: result.fetch(:change_classifications, []),
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
900
|
+
conflicts: result.fetch(:conflicts, []),
|
|
901
|
+
fallbacks: result.fetch(:fallbacks, []),
|
|
902
|
+
provider: result.fetch(:provider, {}),
|
|
903
|
+
verification: result.fetch(:verification, {})
|
|
814
904
|
}
|
|
815
905
|
if result[:ok] && result[:merged_source]
|
|
816
906
|
{
|
|
@@ -848,9 +938,22 @@ module Smorg
|
|
|
848
938
|
end
|
|
849
939
|
|
|
850
940
|
def normalize_language(language, path_name)
|
|
941
|
+
return 'bash' if language.to_s.strip.empty? && %w[.bash .sh].include?(File.extname(path_name.to_s).downcase)
|
|
942
|
+
return 'go' if language.to_s.strip.empty? && File.extname(path_name.to_s).downcase == '.go'
|
|
943
|
+
return 'html' if language.to_s.strip.empty? && %w[.htm .html].include?(File.extname(path_name.to_s).downcase)
|
|
944
|
+
return 'rust' if language.to_s.strip.empty? && File.extname(path_name.to_s).downcase == '.rs'
|
|
945
|
+
return 'typescript' if language.to_s.strip.empty? && File.extname(path_name.to_s).downcase == '.ts'
|
|
946
|
+
return 'tsx' if language.to_s.strip.empty? && File.extname(path_name.to_s).downcase == '.tsx'
|
|
947
|
+
|
|
851
948
|
case language.to_s.strip.downcase
|
|
949
|
+
when 'bash', 'sh', 'application/x-sh', 'text/x-shellscript'
|
|
950
|
+
'bash'
|
|
852
951
|
when 'go', 'golang'
|
|
853
952
|
'go'
|
|
953
|
+
when 'html', 'htm', 'text/html', 'html5'
|
|
954
|
+
'html'
|
|
955
|
+
when 'dotenv', 'env', 'config-env'
|
|
956
|
+
'dotenv'
|
|
854
957
|
when 'json'
|
|
855
958
|
'json'
|
|
856
959
|
when 'jsonc', 'json with comments'
|
|
@@ -859,6 +962,20 @@ module Smorg
|
|
|
859
962
|
'json5'
|
|
860
963
|
when 'markdown', 'md', 'gfm', 'text/markdown'
|
|
861
964
|
'markdown'
|
|
965
|
+
when 'ruby', 'rb', 'application/x-ruby'
|
|
966
|
+
'ruby'
|
|
967
|
+
when 'rbs'
|
|
968
|
+
'rbs'
|
|
969
|
+
when 'rust', 'rs', 'application/rust', 'text/rust'
|
|
970
|
+
'rust'
|
|
971
|
+
when 'toml', 'application/toml'
|
|
972
|
+
'toml'
|
|
973
|
+
when 'typescript', 'ts', 'application/typescript', 'text/typescript'
|
|
974
|
+
'typescript'
|
|
975
|
+
when 'tsx', 'typescriptreact'
|
|
976
|
+
'tsx'
|
|
977
|
+
when 'yaml', 'yml', 'application/yaml', 'text/yaml'
|
|
978
|
+
'yaml'
|
|
862
979
|
when 'plain', 'text', 'plaintext', 'text/plain'
|
|
863
980
|
'text'
|
|
864
981
|
else
|
|
@@ -973,3 +1090,5 @@ module Smorg
|
|
|
973
1090
|
end
|
|
974
1091
|
end
|
|
975
1092
|
end
|
|
1093
|
+
|
|
1094
|
+
require 'rust/merge'
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: smorg-rb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -43,28 +43,42 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.1.
|
|
46
|
+
version: 7.1.3
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - '='
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 7.1.
|
|
53
|
+
version: 7.1.3
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: ast-merge-git
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - '='
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 7.1.
|
|
60
|
+
version: 7.1.3
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - '='
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 7.1.
|
|
67
|
+
version: 7.1.3
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: bash-merge
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - '='
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: 7.1.3
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - '='
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: 7.1.3
|
|
68
82
|
- !ruby/object:Gem::Dependency
|
|
69
83
|
name: diff-lcs
|
|
70
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -79,76 +93,180 @@ dependencies:
|
|
|
79
93
|
- - "~>"
|
|
80
94
|
- !ruby/object:Gem::Version
|
|
81
95
|
version: '1.5'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: dotenv-merge
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - '='
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: 7.1.3
|
|
103
|
+
type: :runtime
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - '='
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: 7.1.3
|
|
82
110
|
- !ruby/object:Gem::Dependency
|
|
83
111
|
name: go-merge
|
|
84
112
|
requirement: !ruby/object:Gem::Requirement
|
|
85
113
|
requirements:
|
|
86
114
|
- - '='
|
|
87
115
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: 7.1.
|
|
116
|
+
version: 7.1.3
|
|
89
117
|
type: :runtime
|
|
90
118
|
prerelease: false
|
|
91
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
120
|
requirements:
|
|
93
121
|
- - '='
|
|
94
122
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: 7.1.
|
|
123
|
+
version: 7.1.3
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: html-merge
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - '='
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: 7.1.3
|
|
131
|
+
type: :runtime
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - '='
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: 7.1.3
|
|
96
138
|
- !ruby/object:Gem::Dependency
|
|
97
139
|
name: json-merge
|
|
98
140
|
requirement: !ruby/object:Gem::Requirement
|
|
99
141
|
requirements:
|
|
100
142
|
- - '='
|
|
101
143
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: 7.1.
|
|
144
|
+
version: 7.1.3
|
|
103
145
|
type: :runtime
|
|
104
146
|
prerelease: false
|
|
105
147
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
148
|
requirements:
|
|
107
149
|
- - '='
|
|
108
150
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: 7.1.
|
|
151
|
+
version: 7.1.3
|
|
110
152
|
- !ruby/object:Gem::Dependency
|
|
111
153
|
name: kettle-jem
|
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
|
155
|
+
requirements:
|
|
156
|
+
- - "~>"
|
|
157
|
+
- !ruby/object:Gem::Version
|
|
158
|
+
version: '7.1'
|
|
159
|
+
- - ">="
|
|
160
|
+
- !ruby/object:Gem::Version
|
|
161
|
+
version: 7.1.3
|
|
162
|
+
type: :runtime
|
|
163
|
+
prerelease: false
|
|
164
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
165
|
+
requirements:
|
|
166
|
+
- - "~>"
|
|
167
|
+
- !ruby/object:Gem::Version
|
|
168
|
+
version: '7.1'
|
|
169
|
+
- - ">="
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: 7.1.3
|
|
172
|
+
- !ruby/object:Gem::Dependency
|
|
173
|
+
name: markdown-merge
|
|
112
174
|
requirement: !ruby/object:Gem::Requirement
|
|
113
175
|
requirements:
|
|
114
176
|
- - '='
|
|
115
177
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: 7.1.
|
|
178
|
+
version: 7.1.3
|
|
117
179
|
type: :runtime
|
|
118
180
|
prerelease: false
|
|
119
181
|
version_requirements: !ruby/object:Gem::Requirement
|
|
120
182
|
requirements:
|
|
121
183
|
- - '='
|
|
122
184
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 7.1.
|
|
185
|
+
version: 7.1.3
|
|
124
186
|
- !ruby/object:Gem::Dependency
|
|
125
|
-
name:
|
|
187
|
+
name: plain-merge
|
|
126
188
|
requirement: !ruby/object:Gem::Requirement
|
|
127
189
|
requirements:
|
|
128
190
|
- - '='
|
|
129
191
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: 7.1.
|
|
192
|
+
version: 7.1.3
|
|
131
193
|
type: :runtime
|
|
132
194
|
prerelease: false
|
|
133
195
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
196
|
requirements:
|
|
135
197
|
- - '='
|
|
136
198
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 7.1.
|
|
199
|
+
version: 7.1.3
|
|
138
200
|
- !ruby/object:Gem::Dependency
|
|
139
|
-
name:
|
|
201
|
+
name: rbs-merge
|
|
140
202
|
requirement: !ruby/object:Gem::Requirement
|
|
141
203
|
requirements:
|
|
142
204
|
- - '='
|
|
143
205
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: 7.1.
|
|
206
|
+
version: 7.1.3
|
|
145
207
|
type: :runtime
|
|
146
208
|
prerelease: false
|
|
147
209
|
version_requirements: !ruby/object:Gem::Requirement
|
|
148
210
|
requirements:
|
|
149
211
|
- - '='
|
|
150
212
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: 7.1.
|
|
213
|
+
version: 7.1.3
|
|
214
|
+
- !ruby/object:Gem::Dependency
|
|
215
|
+
name: ruby-merge
|
|
216
|
+
requirement: !ruby/object:Gem::Requirement
|
|
217
|
+
requirements:
|
|
218
|
+
- - '='
|
|
219
|
+
- !ruby/object:Gem::Version
|
|
220
|
+
version: 7.1.3
|
|
221
|
+
type: :runtime
|
|
222
|
+
prerelease: false
|
|
223
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
224
|
+
requirements:
|
|
225
|
+
- - '='
|
|
226
|
+
- !ruby/object:Gem::Version
|
|
227
|
+
version: 7.1.3
|
|
228
|
+
- !ruby/object:Gem::Dependency
|
|
229
|
+
name: rust-merge
|
|
230
|
+
requirement: !ruby/object:Gem::Requirement
|
|
231
|
+
requirements:
|
|
232
|
+
- - '='
|
|
233
|
+
- !ruby/object:Gem::Version
|
|
234
|
+
version: 7.1.3
|
|
235
|
+
type: :runtime
|
|
236
|
+
prerelease: false
|
|
237
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
238
|
+
requirements:
|
|
239
|
+
- - '='
|
|
240
|
+
- !ruby/object:Gem::Version
|
|
241
|
+
version: 7.1.3
|
|
242
|
+
- !ruby/object:Gem::Dependency
|
|
243
|
+
name: toml-merge
|
|
244
|
+
requirement: !ruby/object:Gem::Requirement
|
|
245
|
+
requirements:
|
|
246
|
+
- - '='
|
|
247
|
+
- !ruby/object:Gem::Version
|
|
248
|
+
version: 7.1.3
|
|
249
|
+
type: :runtime
|
|
250
|
+
prerelease: false
|
|
251
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
252
|
+
requirements:
|
|
253
|
+
- - '='
|
|
254
|
+
- !ruby/object:Gem::Version
|
|
255
|
+
version: 7.1.3
|
|
256
|
+
- !ruby/object:Gem::Dependency
|
|
257
|
+
name: typescript-merge
|
|
258
|
+
requirement: !ruby/object:Gem::Requirement
|
|
259
|
+
requirements:
|
|
260
|
+
- - '='
|
|
261
|
+
- !ruby/object:Gem::Version
|
|
262
|
+
version: 7.1.3
|
|
263
|
+
type: :runtime
|
|
264
|
+
prerelease: false
|
|
265
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
266
|
+
requirements:
|
|
267
|
+
- - '='
|
|
268
|
+
- !ruby/object:Gem::Version
|
|
269
|
+
version: 7.1.3
|
|
152
270
|
- !ruby/object:Gem::Dependency
|
|
153
271
|
name: version_gem
|
|
154
272
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -169,26 +287,40 @@ dependencies:
|
|
|
169
287
|
- - ">="
|
|
170
288
|
- !ruby/object:Gem::Version
|
|
171
289
|
version: 1.1.15
|
|
290
|
+
- !ruby/object:Gem::Dependency
|
|
291
|
+
name: yaml-merge
|
|
292
|
+
requirement: !ruby/object:Gem::Requirement
|
|
293
|
+
requirements:
|
|
294
|
+
- - '='
|
|
295
|
+
- !ruby/object:Gem::Version
|
|
296
|
+
version: 7.1.3
|
|
297
|
+
type: :runtime
|
|
298
|
+
prerelease: false
|
|
299
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
300
|
+
requirements:
|
|
301
|
+
- - '='
|
|
302
|
+
- !ruby/object:Gem::Version
|
|
303
|
+
version: 7.1.3
|
|
172
304
|
- !ruby/object:Gem::Dependency
|
|
173
305
|
name: kettle-dev
|
|
174
306
|
requirement: !ruby/object:Gem::Requirement
|
|
175
307
|
requirements:
|
|
176
308
|
- - "~>"
|
|
177
309
|
- !ruby/object:Gem::Version
|
|
178
|
-
version: '
|
|
310
|
+
version: '3.0'
|
|
179
311
|
- - ">="
|
|
180
312
|
- !ruby/object:Gem::Version
|
|
181
|
-
version:
|
|
313
|
+
version: 3.0.0
|
|
182
314
|
type: :development
|
|
183
315
|
prerelease: false
|
|
184
316
|
version_requirements: !ruby/object:Gem::Requirement
|
|
185
317
|
requirements:
|
|
186
318
|
- - "~>"
|
|
187
319
|
- !ruby/object:Gem::Version
|
|
188
|
-
version: '
|
|
320
|
+
version: '3.0'
|
|
189
321
|
- - ">="
|
|
190
322
|
- !ruby/object:Gem::Version
|
|
191
|
-
version:
|
|
323
|
+
version: 3.0.0
|
|
192
324
|
- !ruby/object:Gem::Dependency
|
|
193
325
|
name: bundler-audit
|
|
194
326
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -266,7 +398,7 @@ dependencies:
|
|
|
266
398
|
version: '3.2'
|
|
267
399
|
- - ">="
|
|
268
400
|
- !ruby/object:Gem::Version
|
|
269
|
-
version: 3.2.
|
|
401
|
+
version: 3.2.2
|
|
270
402
|
type: :development
|
|
271
403
|
prerelease: false
|
|
272
404
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -276,7 +408,7 @@ dependencies:
|
|
|
276
408
|
version: '3.2'
|
|
277
409
|
- - ">="
|
|
278
410
|
- !ruby/object:Gem::Version
|
|
279
|
-
version: 3.2.
|
|
411
|
+
version: 3.2.2
|
|
280
412
|
- !ruby/object:Gem::Dependency
|
|
281
413
|
name: kettle-test
|
|
282
414
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -306,7 +438,7 @@ dependencies:
|
|
|
306
438
|
version: '3.2'
|
|
307
439
|
- - ">="
|
|
308
440
|
- !ruby/object:Gem::Version
|
|
309
|
-
version: 3.2.
|
|
441
|
+
version: 3.2.5
|
|
310
442
|
type: :development
|
|
311
443
|
prerelease: false
|
|
312
444
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -316,7 +448,7 @@ dependencies:
|
|
|
316
448
|
version: '3.2'
|
|
317
449
|
- - ">="
|
|
318
450
|
- !ruby/object:Gem::Version
|
|
319
|
-
version: 3.2.
|
|
451
|
+
version: 3.2.5
|
|
320
452
|
- !ruby/object:Gem::Dependency
|
|
321
453
|
name: ruby-progressbar
|
|
322
454
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -393,10 +525,10 @@ licenses:
|
|
|
393
525
|
- PolyForm-Small-Business-1.0.0
|
|
394
526
|
metadata:
|
|
395
527
|
homepage_uri: https://structuredmerge.org
|
|
396
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
397
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
528
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.3
|
|
529
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.3/CHANGELOG.md
|
|
398
530
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
399
|
-
documentation_uri: https://www.rubydoc.info/gems/smorg-rb/7.1.
|
|
531
|
+
documentation_uri: https://www.rubydoc.info/gems/smorg-rb/7.1.3
|
|
400
532
|
funding_uri: https://github.com/sponsors/pboling
|
|
401
533
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
402
534
|
news_uri: https://www.railsbling.com/tags/smorg-rb
|
metadata.gz.sig
CHANGED
|
Binary file
|