xre 0.5.2-arm64-darwin → 0.5.5-arm64-darwin

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b07765cf4a57ebe7fb9bb226eeb91fd153135a748bd96baf158e08b7a62c62c
4
- data.tar.gz: 12746265ee9f4665daa236647bef8c1135445a2079f56a40c8802757fdc24d93
3
+ metadata.gz: 76231f7ab1d7de570c1830623ac98db908947c3516bcc8ab0503f5745e1329a4
4
+ data.tar.gz: f57cbfca9adef946145218270b2a6418718b0b876ac4cbcc56575f3747997d81
5
5
  SHA512:
6
- metadata.gz: 7c952f1b631432dff1b852d45ad3213783ee867deb219b08910304220e06cd041d06107790cfcade57b10a262e01dd7f71932b18b26016e3bb38173c8dd17e4a
7
- data.tar.gz: 6d67ab597c02781f2d3af778381afce0c32dc6bd5d6f86a56c8a1e8571c30ccbfb7772c875c91332344cd70002e1ac05f7bc490fab32e5ea0e430aca64dc87eb
6
+ metadata.gz: 6941edb9611bbcdf8033e58f50bf2a85dba0729107c4b25ffe621256aafdcc98786b270a9a74191ef2eb9f92141b96dc07386b6e505690aaf7e985510517ede1
7
+ data.tar.gz: 4a1980ccc94a7ea8277b2525e214809e50651a40e067012ca326e4b9bbc21428c89cc088afd5b49231bc4f5a2156b0530126eeae264dce47cc566e87e5723de3
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,9 +62,9 @@ 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:
65
+ ### How to run tests:
27
66
 
28
- ### Ruby tests:
67
+ **Ruby tests:**
29
68
 
30
69
  Our ruby tests live in the regular `spec` directory of the project, so inside `clearscope` run:
31
70
 
@@ -33,22 +72,15 @@ Our ruby tests live in the regular `spec` directory of the project, so inside `c
33
72
  bundle exec rspec spec/xre
34
73
  ```
35
74
 
36
- ### Rust tests:
75
+ **Rust tests:**
37
76
 
38
77
  ```bash
39
- cargo test
78
+ cargo test # you will need rust toolchain for that
40
79
  ```
41
80
 
42
- ## How to publish the gem:
43
-
44
- First, increment the version in the `lib/xre/version.rb` file according to the semantic versioning rules.
45
-
46
- Then build the gem and push it to rubygems:
47
-
48
- ```bash
49
- rake build
50
- gem push pkg/xre-<version>-gem
51
- ```
81
+ ## Publishing:
52
82
 
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.
83
+ The codebase includes `xre/Rakefile` which in turn defines a `gem:native`
84
+ task that compiles the extension for the `x86_64-linux`, `x86_64-darwin`, and `arm64-darwin`
85
+ and puts the compiled gems into `xre/pkg/` directory, from where one should
86
+ `gem push xre-<version>-x86_64-linux.gem` to publish the gem.
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.5"
5
5
  end
data/lib/xre/xre.bundle 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.5
5
5
  platform: arm64-darwin
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: