xre 0.5.2-x86_64-linux → 0.5.4-x86_64-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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +61 -20
  3. data/lib/xre/version.rb +1 -1
  4. data/lib/xre/xre.so +0 -0
  5. metadata +2 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ac57c45b6f672b820a2d0978eb531ac6645b8e9118071d80bc4712215bdf14e
4
- data.tar.gz: 47e4b60e7a4e9e33492ab085b20e0c6490442193127dd009e067223828fe8407
3
+ metadata.gz: 3a2279f75a1ab8f8b604416ebaa8c098dde5ae31821413f8c4f15b30cb7d4258
4
+ data.tar.gz: 70e153012f2725a6de187ca19aa647e9cdcfb1d590a94666bcf956ec4526a273
5
5
  SHA512:
6
- metadata.gz: b2fc3cbd0550016ea572ee6ec4bae957dad1796c9c6d4ac5babfa46d873f4b5651cad291696612feb947d77fed54e68e6bb956dd6fc0e38f952b1b0a4de64737
7
- data.tar.gz: dc2ab19b9debc49cb75722e87b907ba8172800d7c15c1baec0912e391050760aae2782c9621216aa3fd82db461229b1c91dd20e54d9c1171e8e6694faa818793
6
+ metadata.gz: 873c8c81e6da7d3f81527391adfbec0ced5f2a0b3bde884c4bab8c04e4b0e75b33ff4dd0894b650fe5fcf2388ee330080c9d7e5855cfcdc9425a762d7270db14
7
+ data.tar.gz: 32332349b596c445a867756799ca86f37270c900f0d6f5ea5fa95f465cd863f032be17b8b2db6fa86d483431e67e8ae2279f416b6585651798430e67a3e0c102
data/README.md CHANGED
@@ -3,18 +3,57 @@
3
3
  This is a rust extension for finding all the matches in a text.
4
4
  It's a simple extension that is used in one part of our codebase and this extension makes it substantially faster.
5
5
 
6
- The following text assumes you're in the `xre` directory inside `clearscope` project.
6
+ ## Why?
7
7
 
8
- ## How to build rust code localy:
8
+ The main reason for this extension is that we have a unique use case where we need to find all captures
9
+ with their respectful offsets in a large text and we need to do this for a huge number of regexes and texts.
10
+ This is a slow operation in ruby since the regular `scan` does not provide the actual captures,
11
+ but only the offsets. This extension provides the captures and offsets in a single call for a
12
+ list of regexes to avoid the overhead of calling the regex engine multiple times.
13
+
14
+ Moreover, another part of the problem is that we also require the surrounding text of the capture
15
+ with some radius, which is also not possible with the regular `scan` method without resorting to iterating
16
+ the whole text multiple times.
17
+
18
+ > 🤓
19
+ > Another a bit more technical reason for why the rust extension is faster is that ruby strings are
20
+ > indexed in characters(`O(n)`), but rust strings are indexed in bytes(`O(1)`). And with a careful
21
+ > iteration over the characters on the rust side(see `regex_list.rs#captures_with_context` and `utils.rs#find_char_index`) as we go through the text we can avoid multiple(`n`)
22
+ > `O(n)` operations that ruby would have to do, reducing the algorithmic complexity from
23
+ > `O(n^2)` to `O(n)` for one regex, and from `O(m * n^2)` to `O(m * n)`(where `m` and `n` are the number
24
+ > of regexes and the number of texts respectfuly) for multiple regexes.
25
+
26
+ ## Developing:
27
+
28
+ The simplest way to develop the gem locally without reinstalling the gem is to just:
29
+
30
+ 1. change the
31
+ `gem "xre"` in the `Gemfile` to `gem "xre", path: "xre"`
32
+ 2. run `bundle install`
33
+
34
+ and you're good to go. Just change the code(then compile the rust code if you changed it, more on that below),
35
+ go into `rails c` and hack away.
36
+
37
+ Another simple way is to:
38
+
39
+ 1. change the gem code(then, once again, compile the rust code if you changed it)
40
+ 2. go into `rails c` or the console of your choosing
41
+ 3. run `require_relative "xre/lib/xre"`
42
+
43
+ all done.
44
+
45
+ > 💡Note: _The following part of the readme assumes that you're in the `xre` directory inside `clearscope` project._
46
+
47
+ ### How to build rust code locally:
9
48
 
10
49
  ```bash
11
- rake compile
50
+ rake compile # or just rake
12
51
  ```
13
52
 
14
53
  sometimes you might need to clean the build:
15
54
 
16
55
  ```bash
17
- rake clean
56
+ rake clean && rake compile
18
57
  ```
19
58
 
20
59
  you might need to install rust toolchain for that:
@@ -23,32 +62,34 @@ you might need to install rust toolchain for that:
23
62
  curl https://sh.rustup.rs -sSf | sh
24
63
  ```
25
64
 
26
- ## How to run tests:
27
-
28
- ### Ruby tests:
65
+ ### How to run tests:
29
66
 
30
- Our ruby tests live in the regular `spec` directory of the project, so inside `clearscope` run:
67
+ **Ruby tests:**
31
68
 
32
69
  ```bash
33
- bundle exec rspec spec/xre
70
+ bundle exec rake spec
34
71
  ```
35
72
 
36
- ### Rust tests:
73
+ **Rust tests:**
37
74
 
38
75
  ```bash
39
- cargo test
76
+ cargo test # you will need rust toolchain for that
40
77
  ```
41
78
 
42
- ## How to publish the gem:
79
+ **Rust linting:**
43
80
 
44
- First, increment the version in the `lib/xre/version.rb` file according to the semantic versioning rules.
81
+ ````bash
82
+ # you will need rust toolchain for that
83
+ cargo fmt # will format the code
84
+ cargo clippy # will suggest improvements, not only style ones
85
+ ```
45
86
 
46
- Then build the gem and push it to rubygems:
87
+ ## Publishing:
47
88
 
48
- ```bash
49
- rake build
50
- gem push pkg/xre-<version>-gem
51
- ```
89
+ The codebase includes `xre/Rakefile` which in turn defines a `gem:native`
90
+ task that compiles the extension for the `x86_64-linux`, `x86_64-darwin`, and `arm64-darwin`
91
+ and puts the compiled gems into `xre/pkg/` directory, from where one should
92
+ `gem push xre-<version>-x86_64-linux.gem` to publish the gem.
52
93
 
53
- > Note, currently only [`barseek`](https://github.com/Vagab) has access to the rubygems account, so you might need to ask him to publish the gem.
54
- > As soon as this changes and we get a team rubygems account the README will be updated.
94
+ > Note: You will need a docker installed on your machine for that
95
+ ````
data/lib/xre/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Xre
4
- VERSION = "0.5.2"
4
+ VERSION = "0.5.4"
5
5
  end
data/lib/xre/xre.so CHANGED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.4
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - barseek
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-04-19 00:00:00.000000000 Z
11
+ date: 2024-04-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -27,7 +27,6 @@ licenses:
27
27
  metadata:
28
28
  homepage_uri: https://github.com/vagab/xre
29
29
  source_code_uri: https://github.com/vagab/xre
30
- rubygems_mfa_required: 'true'
31
30
  post_install_message:
32
31
  rdoc_options: []
33
32
  require_paths: