autocorrect-rb 2.5.6.pre1-aarch64-linux

Sign up to get free protection for your applications and to get access to all the features.
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: []