rubocop-daemon 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +51 -3
- data/bin/rubocop-daemon-wrapper +47 -5
- data/lib/rubocop/daemon/client_command/exec.rb +1 -1
- data/lib/rubocop/daemon/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 190e538beeb1f58fc133eda7baff54f976c4835d14143d6ca7bb8780e15f88c1
|
4
|
+
data.tar.gz: 31f5094c298bc1af68a853990a8deb9aa39a5fabcc1de609403edea2081745fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c8c1f9fe127c33de58c83a7e4bd0e283356432202aef18613476a5f597971139c00cfc6dc0de1814e886a3365f37cabc7558425429f0d15af4fb2268b482d4c
|
7
|
+
data.tar.gz: ec698adacaca218f38d95c4cb91ef0fd25dd8a2c35de20b2b2703cbd8282b8419760a1c44fd0e0cc53f34af2f889efafbc5b36b194ddaac5fd1408eb5a9db5c5
|
data/README.md
CHANGED
@@ -12,6 +12,12 @@ Install `rubocop-daemon` via rubygems.org:
|
|
12
12
|
gem install rubocop-daemon
|
13
13
|
```
|
14
14
|
|
15
|
+
or if you install RuboCop using bundler, put this in your `Gemfile`:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'rubocop-daemon', require: false
|
19
|
+
```
|
20
|
+
|
15
21
|
## Usage
|
16
22
|
|
17
23
|
To start the server, just run:
|
@@ -76,7 +82,17 @@ rubocop-daemon-wrapper foo.rb bar.rb
|
|
76
82
|
|
77
83
|
`rubocop-daemon-wrapper` will automatically start the daemon server if it is not already running. So the first call will be about the same as `rubocop`, but the second call will be much faster.
|
78
84
|
|
79
|
-
|
85
|
+
### Use with Bundler
|
86
|
+
|
87
|
+
If you install `rubocop-daemon` with bundler, you should set `RUBOCOP_DAEMON_USE_BUNDLER` environment variable:
|
88
|
+
|
89
|
+
```console
|
90
|
+
$ export RUBOCOP_DAEMON_USE_BUNDLER=true
|
91
|
+
```
|
92
|
+
|
93
|
+
Now `rubocop-daemon-wrapper` will call the `rubocop-daemon` command with `bundle exec`.
|
94
|
+
|
95
|
+
### Use with VS Code
|
80
96
|
|
81
97
|
Unfortunately, the [vscode-ruby extension doesn't really allow you to customize the `rubocop` path or binary](https://github.com/rubyide/vscode-ruby/issues/413). (You can change the linter path, but not the formatter.)
|
82
98
|
|
@@ -85,14 +101,46 @@ In the meantime, you could just override the `rubocop` binary with a symlink to
|
|
85
101
|
```bash
|
86
102
|
# Find your rubocop path
|
87
103
|
$ which rubocop
|
88
|
-
|
104
|
+
<HOME>/.rvm/gems/ruby-x.y.z/bin/rubocop
|
105
|
+
|
106
|
+
# Override rubocop with a symlink to rubocop-daemon-wrapper
|
107
|
+
$ ln -fs /usr/local/bin/rubocop-daemon-wrapper $HOME/.rvm/gems/ruby-x.y.z/bin/rubocop
|
108
|
+
```
|
109
|
+
|
110
|
+
Or, if you use rbenv:
|
111
|
+
|
112
|
+
```bash
|
113
|
+
# which rubocop is rbenv running?
|
114
|
+
$ rbenv which rubocop
|
115
|
+
<HOME>/.rbenv/versions/x.y.z/bin/rubocop
|
89
116
|
|
90
117
|
# Override rubocop with a symlink to rubocop-daemon-wrapper
|
91
|
-
$ ln -fs /usr/local/bin/rubocop-daemon-wrapper
|
118
|
+
$ ln -fs /usr/local/bin/rubocop-daemon-wrapper $HOME/.rbenv/versions/x.y.z/bin/rubocop
|
92
119
|
```
|
93
120
|
|
94
121
|
Now VS Code will use the `rubocop-daemon-wrapper` script, and `formatOnSave` should be much faster (~150ms instead of 3-5 seconds).
|
95
122
|
|
123
|
+
### Use with Neovim/Vim8 and ALE
|
124
|
+
|
125
|
+
[ALE](https://github.com/w0rp/ale) setting example:
|
126
|
+
|
127
|
+
```vim
|
128
|
+
" Use `rubocop-daemon-wrapper` instead of `rubocop`
|
129
|
+
let g:ale_ruby_rubocop_executable = 'rubocop-daemon-wrapper'
|
130
|
+
```
|
131
|
+
|
132
|
+
Auto-correct on save setting example:
|
133
|
+
|
134
|
+
```vim
|
135
|
+
" optional: Set fixer(not only linter).
|
136
|
+
let g:ale_fixers = {
|
137
|
+
\ 'ruby': ['rubocop'],
|
138
|
+
\}
|
139
|
+
|
140
|
+
" optional: Auto-correct on save.
|
141
|
+
let g:ale_fix_on_save = 1
|
142
|
+
```
|
143
|
+
|
96
144
|
## Contributing
|
97
145
|
|
98
146
|
Bug reports and pull requests are welcome on GitHub at https://github.com/fohte/rubocop-daemon.
|
data/bin/rubocop-daemon-wrapper
CHANGED
@@ -1,8 +1,24 @@
|
|
1
1
|
#!/bin/bash
|
2
|
+
|
2
3
|
set -e
|
3
4
|
|
5
|
+
COMMAND_PREFIX=""
|
6
|
+
|
7
|
+
if [ -n "$RUBOCOP_DAEMON_USE_BUNDLER" ]; then
|
8
|
+
COMMAND_PREFIX="bundle exec"
|
9
|
+
fi
|
10
|
+
|
11
|
+
if ! command -v rubocop-daemon > /dev/null; then
|
12
|
+
$COMMAND_PREFIX rubocop $@
|
13
|
+
exit $?
|
14
|
+
fi
|
15
|
+
|
4
16
|
if [[ "$OSTYPE" == "linux-gnu" ]]; then
|
5
|
-
|
17
|
+
if [ -f "/etc/fedora-release" ]; then
|
18
|
+
NETCAT_CMD="nc"
|
19
|
+
else
|
20
|
+
NETCAT_CMD="nc -N"
|
21
|
+
fi
|
6
22
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
7
23
|
NETCAT_CMD="nc"
|
8
24
|
elif [[ "$OSTYPE" == "freebsd"* ]]; then
|
@@ -46,16 +62,42 @@ TOKEN_PATH="$PROJECT_CACHE_DIR/token"
|
|
46
62
|
PORT_PATH="$PROJECT_CACHE_DIR/port"
|
47
63
|
STDIN_PATH="$PROJECT_CACHE_DIR/stdin"
|
48
64
|
STATUS_PATH="$PROJECT_CACHE_DIR/status"
|
65
|
+
LOCK_PATH="$CACHE_DIR/running.lock"
|
66
|
+
RUBOCOP_DAEMON="$COMMAND_PREFIX rubocop-daemon"
|
67
|
+
|
68
|
+
# If a lock file exist, wait up to 5 seconds.
|
69
|
+
i=0
|
70
|
+
while [ -d "$LOCK_PATH" ]; do
|
71
|
+
echo "rubocop-daemon-wrapper: rubocop-daemon is processing a request; pausing before trying again..." >&2
|
72
|
+
sleep 1
|
73
|
+
i=$((i + 1))
|
74
|
+
if [ $i -ge 5 ]; then
|
75
|
+
echo "rubocop-daemon-wrapper: Waited more than 5 seconds; ignoring the lock and proceeding." >&2
|
76
|
+
break
|
77
|
+
fi
|
78
|
+
done
|
79
|
+
|
80
|
+
unlock() {
|
81
|
+
rm -r "$LOCK_PATH" 2> /dev/null
|
82
|
+
}
|
83
|
+
|
84
|
+
trap unlock EXIT
|
85
|
+
|
86
|
+
# Acquire a file lock before proceeding.
|
87
|
+
# Macs don't support the `lockfile` command, so just use mkdir.
|
88
|
+
mkdir -p "$LOCK_PATH"
|
49
89
|
|
50
90
|
# If -s or --stdin args are present, read stdin with `cat`
|
51
91
|
for ARG in $@; do
|
52
92
|
if [ -z "$STDIN_CONTENT" ] && [ "$ARG" == "--stdin" ] || [ "$ARG" == "-s" ]; then
|
53
|
-
|
93
|
+
# Preserve final new lines when ingesting from STDIN
|
94
|
+
STDIN_CONTENT="$(cat; printf x)"
|
95
|
+
STDIN_CONTENT=${STDIN_CONTENT%x}
|
54
96
|
fi
|
55
97
|
done
|
56
98
|
|
57
99
|
if [ ! -f "$TOKEN_PATH" ]; then
|
58
|
-
|
100
|
+
$RUBOCOP_DAEMON start
|
59
101
|
fi
|
60
102
|
|
61
103
|
run_rubocop_command() {
|
@@ -63,7 +105,7 @@ run_rubocop_command() {
|
|
63
105
|
PORT="$(cat "$PORT_PATH")"
|
64
106
|
COMMAND="$TOKEN $PROJECT_ROOT exec $@"
|
65
107
|
rm -f "$STATUS_PATH" # Clear the previous status
|
66
|
-
if
|
108
|
+
if printf '%s\n%s' "$COMMAND" "$STDIN_CONTENT" | $NETCAT_CMD localhost "$PORT"; then
|
67
109
|
if [ -f "$STATUS_PATH" ]; then
|
68
110
|
exit "$(cat $STATUS_PATH)"
|
69
111
|
else
|
@@ -80,7 +122,7 @@ if ! run_rubocop_command $@; then
|
|
80
122
|
rm -rf "$CACHE_DIR"
|
81
123
|
pkill -f "rubocop-daemon (re)?start"
|
82
124
|
echo "Starting new rubocop-daemon server..." >&2
|
83
|
-
|
125
|
+
$RUBOCOP_DAEMON start
|
84
126
|
if ! run_rubocop_command $@; then
|
85
127
|
echo "Sorry, something went wrong with rubocop-daemon!" >&2
|
86
128
|
echo "Please try updating the gem or re-installing the rubocop-daemon-wrapper script."
|
@@ -28,7 +28,7 @@ module RuboCop
|
|
28
28
|
raise "rubocop-daemon: Could not find status file at: #{Cache.status_path}" unless Cache.status_path.file?
|
29
29
|
|
30
30
|
status = Cache.status_path.read
|
31
|
-
raise "rubocop-daemon: '#{status}' is not a valid status!"
|
31
|
+
raise "rubocop-daemon: '#{status}' is not a valid status!" if (status =~ /^\d+$/).nil?
|
32
32
|
|
33
33
|
exit status.to_i
|
34
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-daemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hayato Kawai
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -139,8 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: '0'
|
141
141
|
requirements: []
|
142
|
-
|
143
|
-
rubygems_version: 2.7.6
|
142
|
+
rubygems_version: 3.0.1
|
144
143
|
signing_key:
|
145
144
|
specification_version: 4
|
146
145
|
summary: Makes RuboCop faster
|