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