language_server 0.1.0 → 0.2.0
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 +4 -4
- data/.gitignore +1 -0
- data/.vscode/settings.json +5 -0
- data/Dockerfile +9 -9
- data/Dockerfile.development +13 -0
- data/README.md +39 -6
- data/docker-compose.yml +8 -4
- data/docker-sync.yml +7 -0
- data/language_server.gemspec +9 -4
- data/lib/language_server/linter/ruby_wc.rb +37 -0
- data/lib/language_server/version.rb +1 -1
- data/lib/language_server.rb +15 -30
- metadata +22 -5
- data/Dockerfile.production +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4ad7bdb98ed0fdc4c493cecd7c296fc551d23c0
|
4
|
+
data.tar.gz: a458cc4c3aaf8b95d5ae5780fb9896d157476e8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cd2bf30dd8548f44fa82dd28530f694fce2b68445de389a1945d754ce56de2f96ec8a7fb9ad40c3225a1d017a433a0e88b5193e3773f52075fe0a9e71fd344d
|
7
|
+
data.tar.gz: e37e1fd641490f0ab03deb515fec382724248231f59ffc179e6ea3c4cc5ef6722a503cf3cfd5f65dbea336049afe1090dbfe99d528764c7d27b1a8cac7cb548a
|
data/.gitignore
CHANGED
data/Dockerfile
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
FROM ruby:2.4.1
|
1
|
+
FROM ruby:2.4.1-alpine
|
2
2
|
|
3
|
-
|
4
|
-
RUN groupadd --gid 1000 ruby && useradd --uid 1000 --gid ruby --shell /bin/bash --create-home ruby
|
5
|
-
RUN mkdir /app && chown ruby:ruby /app
|
3
|
+
WORKDIR /app
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
COPY lib/language_server/version.rb /app/lib/language_server/
|
6
|
+
COPY Gemfile language_server.gemspec /app/
|
7
|
+
|
8
|
+
RUN bundle install --without development
|
9
|
+
|
10
|
+
COPY lib /app/lib/
|
11
|
+
COPY exe /app/exe/
|
10
12
|
|
11
|
-
USER ruby
|
12
|
-
WORKDIR /app
|
13
13
|
CMD ["bundle", "exec", "exe/language_server"]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
FROM ruby:2.4.1
|
2
|
+
|
3
|
+
RUN apt-get update && apt-get install less -y
|
4
|
+
RUN groupadd --gid 1000 ruby && useradd --uid 1000 --gid ruby --shell /bin/bash --create-home ruby
|
5
|
+
RUN mkdir /app && chown ruby:ruby /app
|
6
|
+
|
7
|
+
ENV LANG=C.UTF-8 \
|
8
|
+
BUNDLE_PATH=/app/vendor/bundle \
|
9
|
+
BUNDLE_JOBS=4
|
10
|
+
|
11
|
+
USER ruby
|
12
|
+
WORKDIR /app
|
13
|
+
CMD ["bundle", "exec", "exe/language_server"]
|
data/README.md
CHANGED
@@ -1,11 +1,19 @@
|
|
1
1
|
# LanguageServer
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
A Ruby Language Server implementation.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
7
|
+
If you are using vscode, instal [ruby-lsc](https://marketplace.visualstudio.com/items?itemName=mtsmfm.ruby-lsc) extension.
|
8
|
+
|
9
|
+
### Docker
|
10
|
+
|
11
|
+
Simply you can pull from [docker hub](https://hub.docker.com/r/mtsmfm/language_server-ruby/)
|
12
|
+
|
13
|
+
$ docker pull mtsmfm/language_server-ruby
|
14
|
+
|
15
|
+
### Ruby gem
|
16
|
+
|
9
17
|
Add this line to your application's Gemfile:
|
10
18
|
|
11
19
|
```ruby
|
@@ -22,13 +30,38 @@ Or install it yourself as:
|
|
22
30
|
|
23
31
|
## Usage
|
24
32
|
|
25
|
-
|
33
|
+
Currently, language_server-ruby supports only stdio to communicate.
|
34
|
+
|
35
|
+
### Docker
|
36
|
+
|
37
|
+
$ docker run mtsmfm/language_server-ruby
|
38
|
+
|
39
|
+
### Ruby gem
|
40
|
+
|
41
|
+
$ language_server
|
26
42
|
|
27
43
|
## Development
|
28
44
|
|
29
|
-
|
45
|
+
### Requirements
|
46
|
+
|
47
|
+
#### docker, docker-compose
|
48
|
+
|
49
|
+
https://docs.docker.com/engine/installation
|
50
|
+
|
51
|
+
#### docker-sync
|
52
|
+
|
53
|
+
https://github.com/EugenMayer/docker-sync/wiki/1.-Installation
|
54
|
+
|
55
|
+
### Setup
|
56
|
+
|
57
|
+
$ git clone https://github.com/mtsmfm/language_server-ruby.git
|
58
|
+
$ cs language_server-ruby
|
59
|
+
$ docker-sync start
|
60
|
+
$ docker-compose run app bin/setup
|
61
|
+
|
62
|
+
### Run test
|
30
63
|
|
31
|
-
|
64
|
+
$ docker-compose run app bundle exec rake test
|
32
65
|
|
33
66
|
## Contributing
|
34
67
|
|
data/docker-compose.yml
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
version: '3.
|
1
|
+
version: '3.0'
|
2
2
|
services:
|
3
3
|
app:
|
4
|
-
build:
|
4
|
+
build:
|
5
|
+
context: .
|
6
|
+
dockerfile: Dockerfile.development
|
5
7
|
volumes:
|
6
|
-
-
|
8
|
+
- app-sync:/app:nocopy
|
7
9
|
- home:/home/ruby
|
8
10
|
- $HOME:/$HOME
|
9
11
|
- $HOME/.gitconfig:/home/ruby/.gitconfig:ro
|
@@ -14,7 +16,9 @@ services:
|
|
14
16
|
user: node
|
15
17
|
working_dir: /app
|
16
18
|
volumes:
|
17
|
-
-
|
19
|
+
- app-sync/:/app
|
18
20
|
- home:/home/node
|
19
21
|
volumes:
|
22
|
+
app-sync:
|
23
|
+
external: true
|
20
24
|
home:
|
data/docker-sync.yml
ADDED
data/language_server.gemspec
CHANGED
@@ -9,13 +9,17 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Fumiaki MATSUSHIMA"]
|
10
10
|
spec.email = ["mtsmfm@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{}
|
13
|
-
spec.description = %q{}
|
12
|
+
spec.summary = %q{A Ruby Language Server implementation}
|
13
|
+
spec.description = %q{A Ruby Language Server implementation}
|
14
14
|
spec.homepage = "https://github.com/mtsmfm/language_server-ruby"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
-
spec.files =
|
18
|
-
|
17
|
+
spec.files = begin
|
18
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
f.match(%r{^(test|spec|features)/})
|
20
|
+
end
|
21
|
+
rescue
|
22
|
+
Dir.glob("**/*").reject {|path| File.directory?(path) }
|
19
23
|
end
|
20
24
|
spec.bindir = "exe"
|
21
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
@@ -25,4 +29,5 @@ Gem::Specification.new do |spec|
|
|
25
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
30
|
spec.add_development_dependency "minitest", "~> 5.0"
|
27
31
|
spec.add_development_dependency "pry-byebug"
|
32
|
+
spec.add_development_dependency "minitest-power_assert"
|
28
33
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "open3"
|
2
|
+
|
3
|
+
module LanguageServer
|
4
|
+
module Linter
|
5
|
+
class Error
|
6
|
+
attr_reader :line_num, :message, :type
|
7
|
+
|
8
|
+
def initialize(line_num:, message:, type:)
|
9
|
+
@line_num = line_num
|
10
|
+
@message = message
|
11
|
+
@type = type
|
12
|
+
end
|
13
|
+
|
14
|
+
def warning?
|
15
|
+
@type == "warning"
|
16
|
+
end
|
17
|
+
|
18
|
+
def ==(other)
|
19
|
+
line_num == other.line_num && message == other.message
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class RubyWC
|
24
|
+
def initialize(source)
|
25
|
+
@source = source
|
26
|
+
end
|
27
|
+
|
28
|
+
def call
|
29
|
+
_, err, _ = Open3.capture3("ruby -wc", stdin_data: @source)
|
30
|
+
|
31
|
+
err.scan(/.+:(\d+):\s*(.+?)[,:]\s(.+)/).map do |line_num, type, message|
|
32
|
+
Error.new(line_num: line_num.to_i, message: message, type: type)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/language_server.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "language_server/version"
|
2
2
|
require "language_server/protocol/interfaces"
|
3
3
|
require "language_server/protocol/constants"
|
4
|
+
require "language_server/linter/ruby_wc"
|
4
5
|
|
5
6
|
require "json"
|
6
7
|
require "logger"
|
@@ -132,43 +133,27 @@ module LanguageServer
|
|
132
133
|
end
|
133
134
|
|
134
135
|
on :"textDocument/didChange" do |request, notifier|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
diagnostics = err.lines.map do |line|
|
148
|
-
line_num, message = line.scan(/#{Regexp.escape(file.path)}:(\d+): (.*)\n/).flatten
|
149
|
-
line_num = line_num.to_i
|
150
|
-
|
151
|
-
Protocol::Interfaces::Diagnostic.new(
|
152
|
-
message: message,
|
153
|
-
severity: severity,
|
154
|
-
range: Protocol::Interfaces::Range.new(
|
155
|
-
start: Protocol::Interfaces::Position.new(
|
156
|
-
line: line_num.to_i - 1,
|
157
|
-
character: 0
|
158
|
-
),
|
159
|
-
end: Protocol::Interfaces::Position.new(
|
160
|
-
line: line_num.to_i - 1,
|
161
|
-
character: 0
|
162
|
-
)
|
136
|
+
diagnostics = Linter::RubyWC.new(request[:params][:contentChanges][0][:text]).call.map do |error|
|
137
|
+
Protocol::Interfaces::Diagnostic.new(
|
138
|
+
message: error.message,
|
139
|
+
severity: error.warning? ? Protocol::Constants::DiagnosticSeverity::WARNING : Protocol::Constants::DiagnosticSeverity::ERROR,
|
140
|
+
range: Protocol::Interfaces::Range.new(
|
141
|
+
start: Protocol::Interfaces::Position.new(
|
142
|
+
line: error.line_num,
|
143
|
+
character: 0
|
144
|
+
),
|
145
|
+
end: Protocol::Interfaces::Position.new(
|
146
|
+
line: error.line_num,
|
147
|
+
character: 0
|
163
148
|
)
|
164
149
|
)
|
165
|
-
|
150
|
+
)
|
166
151
|
end
|
167
152
|
|
168
153
|
notifier.call(
|
169
154
|
method: :"textDocument/publishDiagnostics",
|
170
155
|
params: Protocol::Interfaces::PublishDiagnosticsParams.new(
|
171
|
-
uri: uri,
|
156
|
+
uri: request[:params][:textDocument][:uri],
|
172
157
|
diagnostics: diagnostics
|
173
158
|
)
|
174
159
|
)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: language_server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fumiaki MATSUSHIMA
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,7 +66,21 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-power_assert
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: A Ruby Language Server implementation
|
70
84
|
email:
|
71
85
|
- mtsmfm@gmail.com
|
72
86
|
executables:
|
@@ -75,9 +89,10 @@ extensions: []
|
|
75
89
|
extra_rdoc_files: []
|
76
90
|
files:
|
77
91
|
- ".gitignore"
|
92
|
+
- ".vscode/settings.json"
|
78
93
|
- CODE_OF_CONDUCT.md
|
79
94
|
- Dockerfile
|
80
|
-
- Dockerfile.
|
95
|
+
- Dockerfile.development
|
81
96
|
- Gemfile
|
82
97
|
- LICENSE.txt
|
83
98
|
- README.md
|
@@ -86,9 +101,11 @@ files:
|
|
86
101
|
- bin/generate_files
|
87
102
|
- bin/setup
|
88
103
|
- docker-compose.yml
|
104
|
+
- docker-sync.yml
|
89
105
|
- exe/language_server
|
90
106
|
- language_server.gemspec
|
91
107
|
- lib/language_server.rb
|
108
|
+
- lib/language_server/linter/ruby_wc.rb
|
92
109
|
- lib/language_server/protocol/constants.rb
|
93
110
|
- lib/language_server/protocol/constants/completion_item_kind.rb
|
94
111
|
- lib/language_server/protocol/constants/diagnostic_severity.rb
|
@@ -216,5 +233,5 @@ rubyforge_project:
|
|
216
233
|
rubygems_version: 2.6.12
|
217
234
|
signing_key:
|
218
235
|
specification_version: 4
|
219
|
-
summary:
|
236
|
+
summary: A Ruby Language Server implementation
|
220
237
|
test_files: []
|