1
- require "open3"
1
+ begin
2
+ require 'rubocop'
3
+ rescue LoadError
4
+ end
2
5
3
6
module LanguageServer
4
7
module Linter
@@ -8,17 +11,28 @@ def initialize(path, config_path="")
8
11
@config_path = config_path
9
12
end
10
13
14
+
11
15
def call
12
- Bundler . with_clean_env do
13
- command = "rubocop #{ @path } --format json --force-exclusion"
14
- command += " --config #{ @config_path } " if @config_path != ""
15
- o , err , _ = Open3 . capture3 ( command )
16
- return [ Error . new ( line_num : 0 , message : err , type : 'error' ) ] if err != ""
17
- JSON
18
- . parse ( o ) [ 'files' ] . map { |v | v [ 'offenses' ] }
19
- . flatten
20
- . map { |v | Error . new ( line_num : v [ 'location' ] [ 'line' ] . to_i - 1 , message : v [ 'message' ] , type : convert_type ( v [ 'severity' ] ) ) }
16
+ return [ ] unless defined? ::RuboCop
17
+ args = [ "--format" , "json" , @path ]
18
+ args += [ "--config" , @config_path ] if @config_path != ''
19
+ options , paths = ::RuboCop ::Options . new . parse ( args )
20
+ config_store = ::RuboCop ::ConfigStore . new
21
+ config_store . options_config = options [ :config ] if options [ :config ]
22
+ o = nil
23
+ begin
24
+ $stdout = StringIO . new
25
+ runner = ::RuboCop ::Runner . new ( options , config_store )
26
+ runner . run ( paths )
27
+ o = $stdout. string
28
+ ensure
29
+ $stdout = STDOUT
21
30
end
31
+ return [ ] unless o
32
+ JSON
33
+ . parse ( o ) [ 'files' ] . map { |v | v [ 'offenses' ] }
34
+ . flatten
35
+ . map { |v | Error . new ( line_num : v [ 'location' ] [ 'line' ] . to_i - 1 , message : v [ 'message' ] , type : convert_type ( v [ 'severity' ] ) ) }
22
36
end
23
37
24
38
private
0 commit comments