autocorrect-rb 2.5.6.pre1-aarch64-linux

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bc119f6317b778e10540c371c025bf14c89e66604acb2e3d7374f4a3c13c8eb6
4
+ data.tar.gz: 50ff079ddacc56475ef9de4e7ca63afddc34a3b9935cd4d913277b9fd3975b95
5
+ SHA512:
6
+ metadata.gz: 83601e1a1158968a7736c57498ecb077b20493c9b3ff02bdeb06b576ebd11cf612326818b1828a28ba3f00e95a0cc0a83f6a00677ec550118a2d3ab64b032ad9
7
+ data.tar.gz: 4f2aee8dad27274cabcf475e1e1d0e5f48cdd174577a3749476bca4f4967f74c655518c65d879cf4a9a71682fd57369c809eb8fa4ad8f6f746406eaa87d7bb32
data/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # AutoCorrect for Ruby
2
+
3
+ <a href="https://rubygems.org/gems/autocorrect-rb"><img src="https://img.shields.io/gem/v/autocorrect-rb?color=1&label=Gem" alt="Gem Version"></a>
4
+
5
+ The Native Ruby version of [AutoCorrect](https://github.com/huacnlee/autocorrect).
6
+
7
+ - Rust - [autocorrect](https://github.com/huacnlee/autocorrect)
8
+ - Ruby - [autocorrect-rb](https://github.com/huacnlee/autocorrect/tree/main/autocorrect-rb)
9
+ - Go - [autocorrect-go](https://github.com/longbridgeapp/autocorrect)
10
+ - Python - [autocorrect-py](https://github.com/huacnlee/autocorrect/tree/main/autocorrect-py)
11
+ - Node.js - [autocorrect-node](https://github.com/huacnlee/autocorrect/tree/main/autocorrect-node)
12
+ - JavaScript (Browser) - [autocorrect-wasm](https://github.com/huacnlee/autocorrect/tree/main/autocorrect-wasm)
13
+ - Java - [autocorrect-java](https://github.com/huacnlee/autocorrect/tree/main/autocorrect-java)
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ $ bundle add autocorrect-rb
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ```rb
24
+ require('autocorrect-rb')
25
+
26
+ out = AutoCorrect.format('Hello你好.')
27
+ puts out
28
+ # Hello 你好。
29
+
30
+ out = AutoCorrect.format_for("title = 'Hello你好。'", 'rb')
31
+ puts out
32
+ # title = 'Hello 你好。'
33
+
34
+ result = AutoCorrect.lint_for("title = 'Hello你好。'", 'rb')
35
+ puts result
36
+ # {
37
+ # filepath: 'rb',
38
+ # lines: [
39
+ # { l: 1, c: 13, new: "'Hello 你好。'", old: "'Hello你好。'", severity: 1 }
40
+ # ],
41
+ # error: ''
42
+ # }
43
+
44
+ config_str = %({ textRules: { "你好hello": 0 } })
45
+ AutoCorrect.load_config(config_str)
46
+ out = AutoCorrect.format('Hello你好.')
47
+ puts out
48
+ # Hello 你好。
49
+ out = AutoCorrect.format('你好hello')
50
+ puts out
51
+ # 你好hello
52
+
53
+ # Ignorer, if /path/to/workdir contains .autocorrectignore or .gitignore
54
+ ignorer = AutoCorrect::Ignorer.new("/path/to/")
55
+ ignorer.ignored?("README.md")
56
+ ```
57
+
58
+ ## Benchmarks
59
+
60
+ 🎊 Rust version is ~3.5x faster than the Ruby (pure) version.
61
+
62
+ > NOTE: In this case Rust version has more complex rules.
63
+
64
+ ### Rust version
65
+
66
+ ```bash
67
+ Warming up --------------------------------------
68
+ format 50 chars 11.348k i/100ms
69
+ format 100 chars 6.033k i/100ms
70
+ format 400 chars 1.772k i/100ms
71
+ format_html 545.000 i/100ms
72
+ Calculating -------------------------------------
73
+ format 50 chars 111.904k (± 3.1%) i/s - 567.400k in 5.075674s
74
+ format 100 chars 58.684k (± 2.1%) i/s - 295.617k in 5.039837s
75
+ format 400 chars 17.266k (± 2.9%) i/s - 86.828k in 5.033234s
76
+ format_html 5.448k (± 1.5%) i/s - 27.250k in 5.002853s
77
+ ```
78
+
79
+ ```
80
+ 1000 ms / 111904 i/s = 0.008 ms
81
+ ```
82
+
83
+ ### Pure [Ruby version](https://rubygems.org/gems/auto-correct/versions/1.0.0) result:
84
+
85
+ ```bash
86
+ Warming up --------------------------------------
87
+ format 50 chars 3.167k i/100ms
88
+ format 100 chars 1.588k i/100ms
89
+ format 400 chars 496.000 i/100ms
90
+ format_html 166.000 i/100ms
91
+ Calculating -------------------------------------
92
+ format 50 chars 31.589k (± 2.5%) i/s - 158.350k in 5.016131s
93
+ format 100 chars 16.122k (± 1.2%) i/s - 80.988k in 5.024082s
94
+ format 400 chars 4.946k (± 2.6%) i/s - 24.800k in 5.017711s
95
+ format_html 1.659k (± 1.7%) i/s - 8.300k in 5.003164s
96
+ ```
97
+
98
+ ### Rust version VS Purge Ruby Version
99
+
100
+ | Test Case | Duration (Rust) | Duration (Pure Ruby) | Speedup |
101
+ | ----------- | --------------- | -------------------- | ------- |
102
+ | Foramt 50 | 0.008ms | 0.031ms | ~3.8x |
103
+ | Format 100 | 0.017ms | 0.062ms | ~3.6x |
104
+ | Format 400 | 0.052ms | 0.2ms | ~3.8x |
105
+ | Format HTML | 0.183ms | 0.67ms | ~3.6x |
106
+
107
+ > 🎈 Rust version about 3.5 ~ 3.8x fast then Ruby (pure version).
108
+ >
109
+ > By this result, we can see the Ruby version is also fast, but the Rust version is more better.
110
+
111
+ ## Know issues
112
+
113
+ Bundler install error:
114
+
115
+ ```
116
+ Could not find gem 'autocorrect-rb' with platform 'ruby' in rubygems repository https://rubygems.org/ or installed locally.
117
+ ```
118
+
119
+ To fix this you can run:
120
+
121
+ ```bash
122
+ $ bundle lock --remove-platform ruby
123
+ ```
124
+
125
+ Because of autocorrect-rb not release the gem for `platform: ruby`, but your `Gemfile.lock` specialed that. This command will remove `ruby` platform from your `Gemfile.lock`
data/Rakefile ADDED
@@ -0,0 +1,97 @@
1
+ # autocorrect: false
2
+ require "rubygems"
3
+
4
+ begin
5
+ require "bundler/setup"
6
+ rescue LoadError
7
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
8
+ end
9
+
10
+ require "bundler/gem_tasks"
11
+ require "rubygems/package_task"
12
+ require "rake/testtask"
13
+ require "rake/extensiontask"
14
+ require "bundler"
15
+
16
+ CROSS_PLATFORMS = %w[
17
+ aarch64-linux
18
+ arm64-darwin
19
+ x64-mingw32
20
+ x86_64-darwin
21
+ x86_64-linux
22
+ ]
23
+
24
+ Rake::TestTask.new(:test) do |t|
25
+ t.libs << "test"
26
+ t.libs << "lib"
27
+ t.test_files = FileList["test/**/*_test.rb"]
28
+ end
29
+
30
+ spec = Bundler.load_gemspec("autocorrect-rb.gemspec")
31
+
32
+ # Make a autocorrect-rb-0.0.0.gem
33
+ # Disable release gem for platform: ruby, because autocorrect rust source build is complex.
34
+ # Gem::PackageTask.new(spec).define
35
+
36
+ # Make a native gem, eg. autocorrect-rb-0.0.0-x86_64-linux.gem
37
+ Rake::ExtensionTask.new("autocorrect", spec) do |ext|
38
+ # Compile output autocorrect.so into lib/autocorrect/autocorrect.so
39
+ ext.lib_dir = "lib/autocorrect"
40
+ ext.source_pattern = "*.{rs,toml}"
41
+ ext.cross_compile = true
42
+ ext.cross_platform = CROSS_PLATFORMS
43
+ end
44
+
45
+ task :bench do
46
+ require "benchmark/ips"
47
+ require "./lib/autocorrect-rb"
48
+
49
+ html = open("./test/fixtures/example.txt").read
50
+
51
+ Benchmark.ips do |x|
52
+ x.report("format 50 chars") do |n|
53
+ n.times do
54
+ AutoCorrect.format("【野村:重申吉利汽车(00175)“买入”评级 上调目标价至17.9港元】智通财经APP获悉,野村发布报告称")
55
+ end
56
+ end
57
+ x.report("format 100 chars") do |n|
58
+ n.times do
59
+ AutoCorrect.format("【野村:重申吉利汽车(00175)“买入”评级 上调目标价至17.9港元】智通财经APP获悉,野村发布报告称,【野村:重申吉利汽车(00175)“买入”评�� 上调目标价至17.9港元】智通财经APP获悉,野村发布报告称")
60
+ end
61
+ end
62
+ x.report("format 400 chars") do |n|
63
+ n.times do
64
+ AutoCorrect.format("【野村:重申吉利汽车(00175)“买入”评级 上调目标价至17.9港元】智通财经APP获悉,野村发布报告称,上调吉利汽车(00175)目标价12.58%,由15.9港元升至17.9港元,并维持吉汽为行业首选股,重申对其“买入”评级,坚信吉汽长远可成为行业赢家。 该行称,随着公司销量持续复苏及产品组合改善,预计今年销量可达148万辆,同比升9%,较公司原定目标销量141万辆为高。 该行又称称,上调公司今明两年每股盈利预测各13%及升毛利率0.1个百分点,以反映销量较预期高2%及产品组合改善,主要是由领克品牌带动。公司自去年8月开始已持续投资领克品牌及进行市场推广,带动领克销量环比有所改变,��期今明两年领克将占整体销量的11%及14%。 该行表示,由于低端国产车品牌在欠缺新车款及科技下,行业整合度将提升。另外,公司从去年第二季到12月为止,一��都积极推动经销商去库存,这将有利公司今年利润率复苏。")
65
+ end
66
+ end
67
+
68
+ x.report("format_html") do |n|
69
+ n.times do
70
+ AutoCorrect.format_for(html, "text.html")
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ task :memory do
77
+ require "memory_profiler"
78
+ require "./lib/autocorrect-rb"
79
+
80
+ html = open("./test/fixtures/example.txt").read
81
+
82
+ report = MemoryProfiler.report do
83
+ 20_000.times do
84
+ AutoCorrect.format("【野村:重申吉利汽车(00175)“买入”评级 上调目标价至17.9港元】智通财经APP获悉,野村发布报告称,【野村:重申吉利汽车(00175)“买入”评�� 上调目标价至17.9港元】智通财经APP获悉,野村发布报告称")
85
+ AutoCorrect.format_for(html, "text.html")
86
+ end
87
+ end
88
+
89
+ GC.start
90
+ report.pretty_print
91
+
92
+ puts "------------------------- Result Guide -------------------------"
93
+ puts "If [Total retained] have any bytes, there will have memory leak."
94
+ end
95
+
96
+ task test: :compile
97
+ task default: %i[test]
@@ -0,0 +1,13 @@
1
+ [package]
2
+ edition = "2021"
3
+ name = "autocorrect-rb"
4
+ version = "2.5.5"
5
+
6
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7
+ [lib]
8
+ crate-type = ["cdylib"]
9
+ name = "autocorrect"
10
+
11
+ [dependencies]
12
+ autocorrect = "2"
13
+ magnus = "0.4"
@@ -0,0 +1,4 @@
1
+ require "mkmf"
2
+ require "rb_sys/mkmf"
3
+
4
+ create_rust_makefile("autocorrect")
@@ -0,0 +1,151 @@
1
+ use magnus::{define_class, function, method, Error, Module, Object};
2
+
3
+ #[derive(Debug, Clone)]
4
+ pub struct LineResult {
5
+ line: usize,
6
+ col: usize,
7
+ new: String,
8
+ old: String,
9
+ severity: usize,
10
+ }
11
+
12
+ impl LineResult {
13
+ pub fn line(&self) -> usize {
14
+ self.line
15
+ }
16
+
17
+ pub fn col(&self) -> usize {
18
+ self.col
19
+ }
20
+
21
+ pub fn get_new(&self) -> String {
22
+ self.new.clone()
23
+ }
24
+
25
+ pub fn old(&self) -> String {
26
+ self.old.clone()
27
+ }
28
+
29
+ pub fn severity(&self) -> usize {
30
+ self.severity
31
+ }
32
+
33
+ pub fn inspect(&self) -> String {
34
+ format!("{:?}", self)
35
+ }
36
+
37
+ pub fn to_hash(&self) -> Result<magnus::RHash, Error> {
38
+ let hash = magnus::RHash::new();
39
+ hash.aset("line", self.line())?;
40
+ hash.aset("col", self.col())?;
41
+ hash.aset("new", self.get_new())?;
42
+ hash.aset("old", self.old())?;
43
+ hash.aset("severity", self.severity())?;
44
+ Ok(hash)
45
+ }
46
+ }
47
+
48
+ #[derive(Debug, Clone)]
49
+ pub struct LintResult {
50
+ pub filepath: String,
51
+ pub lines: Vec<LineResult>,
52
+ pub error: String,
53
+ }
54
+
55
+ impl LintResult {
56
+ pub fn filepath(&self) -> String {
57
+ self.filepath.clone()
58
+ }
59
+
60
+ pub fn lines(&self) -> Vec<LineResult> {
61
+ self.lines.clone()
62
+ }
63
+
64
+ pub fn error(&self) -> String {
65
+ self.error.clone()
66
+ }
67
+
68
+ pub fn inspect(&self) -> String {
69
+ format!("{:?}", self)
70
+ }
71
+
72
+ pub fn to_hash(&self) -> Result<magnus::RHash, Error> {
73
+ let hash = magnus::RHash::new();
74
+ hash.aset("filepath", self.filepath())?;
75
+ hash.aset(
76
+ "lines",
77
+ self.lines()
78
+ .iter()
79
+ .map(|l| l.to_hash().unwrap())
80
+ .collect::<Vec<magnus::RHash>>(),
81
+ )?;
82
+ hash.aset("error", self.error())?;
83
+ Ok(hash)
84
+ }
85
+ }
86
+
87
+ #[magnus::wrap(class = "AutoCorrect::Ignorer")]
88
+ pub struct Ignorer {
89
+ core: autocorrect::ignorer::Ignorer,
90
+ }
91
+
92
+ impl Ignorer {
93
+ pub fn new(work_dir: String) -> Self {
94
+ Ignorer {
95
+ core: autocorrect::ignorer::Ignorer::new(&work_dir),
96
+ }
97
+ }
98
+
99
+ fn is_ignored(&self, path: String) -> bool {
100
+ self.core.is_ignored(&path)
101
+ }
102
+ }
103
+
104
+ pub fn format(input: String) -> String {
105
+ autocorrect::format(&input)
106
+ }
107
+
108
+ pub fn format_for(input: String, filename_or_ext: String) -> String {
109
+ autocorrect::format_for(&input, &filename_or_ext).out
110
+ }
111
+
112
+ pub fn lint_for(input: String, filename_or_ext: String) -> magnus::RHash {
113
+ let result = autocorrect::lint_for(&input, &filename_or_ext);
114
+
115
+ LintResult {
116
+ filepath: filename_or_ext,
117
+ lines: result
118
+ .lines
119
+ .iter()
120
+ .map(|l| LineResult {
121
+ line: l.line,
122
+ col: l.col,
123
+ new: l.new.clone(),
124
+ old: l.old.clone(),
125
+ severity: l.severity as usize,
126
+ })
127
+ .collect::<_>(),
128
+ error: result.error,
129
+ }
130
+ .to_hash()
131
+ .unwrap()
132
+ }
133
+
134
+ pub fn load_config(config_str: String) {
135
+ autocorrect::config::load(&config_str).unwrap();
136
+ }
137
+
138
+ #[magnus::init(name = "autocorrect")]
139
+ fn init() -> Result<(), Error> {
140
+ let class = define_class("AutoCorrect", Default::default())?;
141
+ class.define_singleton_method("format", function!(format, 1))?;
142
+ class.define_singleton_method("format_for", function!(format_for, 2))?;
143
+ class.define_singleton_method("lint_for", function!(lint_for, 2))?;
144
+ class.define_singleton_method("load_config", function!(load_config, 1))?;
145
+
146
+ let ignorer_class = class.define_class("Ignorer", Default::default())?;
147
+ ignorer_class.define_singleton_method("new", function!(Ignorer::new, 1))?;
148
+ ignorer_class.define_method("ignored?", method!(Ignorer::is_ignored, 1))?;
149
+
150
+ Ok(())
151
+ }
Binary file
Binary file
Binary file
@@ -0,0 +1,7 @@
1
+ begin
2
+ # load the precompiled extension file
3
+ ruby_version = /(\d+\.\d+)/.match(::RUBY_VERSION)
4
+ require_relative "autocorrect/#{ruby_version}/autocorrect"
5
+ rescue LoadError
6
+ require "autocorrect/autocorrect"
7
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: autocorrect-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.5.6.pre1
5
+ platform: aarch64-linux
6
+ authors:
7
+ - Jason Lee
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-01-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rb_sys
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.18
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.18
27
+ description: AutoCorrect is a linter and formatter to help you to improve copywriting,
28
+ correct spaces, words, punctuations between CJK (Chinese, Japanese, Korean).
29
+ email:
30
+ - huacnlee@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - README.md
36
+ - Rakefile
37
+ - ext/autocorrect/Cargo.toml
38
+ - ext/autocorrect/extconf.rb
39
+ - ext/autocorrect/src/lib.rs
40
+ - lib/autocorrect-rb.rb
41
+ - lib/autocorrect/2.7/autocorrect.so
42
+ - lib/autocorrect/3.0/autocorrect.so
43
+ - lib/autocorrect/3.1/autocorrect.so
44
+ homepage: https://github.com/huacnlee/autocorrect
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '2.7'
57
+ - - "<"
58
+ - !ruby/object:Gem::Version
59
+ version: 3.2.dev
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">"
63
+ - !ruby/object:Gem::Version
64
+ version: 1.3.1
65
+ requirements: []
66
+ rubygems_version: 3.3.22
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: AutoCorrect is a linter and formatter to help you to improve copywriting.
70
+ test_files: []