language_server 0.9.0 → 0.10.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 +5 -5
- data/.gitignore +1 -0
- data/.rubocop.yml +45 -0
- data/CHANGELOG.md +5 -0
- data/Dockerfile +2 -0
- data/Dockerfile.development +1 -1
- data/Gemfile +4 -1
- data/Guardfile +1 -1
- data/README.md +2 -0
- data/Rakefile +1 -1
- data/benchmark/rubocop +25 -0
- data/benchmark/ruby_wc +3 -3
- data/bin/ci +7 -0
- data/bin/rubocop +17 -0
- data/circle.yml +10 -2
- data/exe/language_server-ruby +23 -1
- data/language_server.gemspec +13 -14
- data/lib/language_server.rb +42 -25
- data/lib/language_server/completion_provider/ad_hoc.rb +7 -7
- data/lib/language_server/completion_provider/rcodetools.rb +4 -4
- data/lib/language_server/definition_provider/ad_hoc.rb +5 -5
- data/lib/language_server/file_store.rb +21 -21
- data/lib/language_server/linter/rubocop.rb +16 -18
- data/lib/language_server/linter/ruby_wc.rb +48 -37
- data/lib/language_server/logger.rb +12 -12
- data/lib/language_server/project.rb +34 -34
- data/lib/language_server/project/node.rb +15 -12
- data/lib/language_server/project/parser.rb +54 -54
- data/lib/language_server/version.rb +1 -1
- metadata +44 -54
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 8d1bb86816f7e13333c5e9fbc6ed4930d48dcc90b7c865fc10942ffd3e279fd2
         | 
| 4 | 
            +
              data.tar.gz: 59f55973ed8a7fcba78d0172235baa6247ca755758533bd64f0516c13da491fa
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 015ee3cdc9cdf83bf92fc39f892c09aa27c5cf2161cc55da7168b67f58ad59214a9c38cdd10ffa3e3aeb6757dcd4c3c89c8564a1211ead9649b205acdb9da847
         | 
| 7 | 
            +
              data.tar.gz: c5360bb9e9a02a8fa326dce7ebae9e331b8556534e692f7885f919430c9928c9cb9132371b78af3742bc410e03d8cc7ea922fa8ad09f0b085938c0797512a27f
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.rubocop.yml
    ADDED
    
    | @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            inherit_from:
         | 
| 2 | 
            +
              - https://github.com/onk/onkcop/raw/v0.51.0.0/config/rubocop.yml
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            AllCops:
         | 
| 5 | 
            +
              TargetRubyVersion: 2.2
         | 
| 6 | 
            +
              Exclude:
         | 
| 7 | 
            +
                - 'bin/**/*'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # TODO: Remove this config after droping Ruby 2.2 support
         | 
| 10 | 
            +
            Layout/IndentHeredoc:
         | 
| 11 | 
            +
              Include:
         | 
| 12 | 
            +
                - 'test/**/*'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            Lint/AssignmentInCondition:
         | 
| 15 | 
            +
              Enabled: false
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Lint/HandleExceptions:
         | 
| 18 | 
            +
              Enabled: false
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            Naming/HeredocDelimiterNaming:
         | 
| 21 | 
            +
              Enabled: false
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            Style/BlockDelimiters:
         | 
| 24 | 
            +
              Enabled: false
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            Style/MultilineBlockChain:
         | 
| 27 | 
            +
              Enabled: false
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            Style/Semicolon:
         | 
| 30 | 
            +
              Enabled: false
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            Metrics/AbcSize:
         | 
| 33 | 
            +
              Max: 50
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            Metrics/BlockLength:
         | 
| 36 | 
            +
              Max: 30
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            Metrics/MethodLength:
         | 
| 39 | 
            +
              Max: 40
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            Metrics/ModuleLength:
         | 
| 42 | 
            +
              Enabled: false
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            Metrics/LineLength:
         | 
| 45 | 
            +
              Max: 200
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/Dockerfile
    CHANGED
    
    
    
        data/Dockerfile.development
    CHANGED
    
    
    
        data/Gemfile
    CHANGED
    
    | @@ -1,4 +1,7 @@ | |
| 1 | 
            -
            source  | 
| 1 | 
            +
            source "https://rubygems.org"
         | 
| 2 2 |  | 
| 3 3 | 
             
            # Specify your gem's dependencies in language_server.gemspec
         | 
| 4 4 | 
             
            gemspec
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            # TODO: Use released gem after new release includes https://github.com/bbatsov/rubocop/pull/4987
         | 
| 7 | 
            +
            gem "rubocop", git: "https://github.com/bbatsov/rubocop", ref: "88d9e3b"
         | 
    
        data/Guardfile
    CHANGED
    
    | @@ -5,5 +5,5 @@ guard :minitest, all_after_pass: true do | |
| 5 5 | 
             
              watch(%r{^test/(.*)\/?test_(.*)\.rb$})
         | 
| 6 6 | 
             
              watch(%r{^test/(.*)\/?(.*)_test\.rb$})
         | 
| 7 7 | 
             
              watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/#{m[1]}test_#{m[2]}.rb" }
         | 
| 8 | 
            -
              watch(%r{^test/test_helper\.rb$})      {  | 
| 8 | 
            +
              watch(%r{^test/test_helper\.rb$})      { "test" }
         | 
| 9 9 | 
             
            end
         | 
    
        data/README.md
    CHANGED
    
    
    
        data/Rakefile
    CHANGED
    
    
    
        data/benchmark/rubocop
    ADDED
    
    | @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "bundler/setup"
         | 
| 4 | 
            +
            require "benchmark/ips"
         | 
| 5 | 
            +
            require "language_server"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            error_code = <<-EOS
         | 
| 8 | 
            +
            require "foo
         | 
| 9 | 
            +
            if a == "\\n"
         | 
| 10 | 
            +
            EOS
         | 
| 11 | 
            +
            warn_code = <<-EOS
         | 
| 12 | 
            +
            a = 1
         | 
| 13 | 
            +
            EOS
         | 
| 14 | 
            +
            valid_code = File.read(__FILE__)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            require "pry-byebug"
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            LanguageServer::Linter::Rubocop.new(valid_code).call
         | 
| 19 | 
            +
            Benchmark.ips do |x|
         | 
| 20 | 
            +
              x.report(`git log --pretty=oneline --abbrev-commit -n 1`) do
         | 
| 21 | 
            +
                [error_code, warn_code, valid_code].each do |code|
         | 
| 22 | 
            +
                  LanguageServer::Linter::Rubocop.new(code).call
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
    
        data/benchmark/ruby_wc
    CHANGED
    
    
    
        data/bin/ci
    ADDED
    
    
    
        data/bin/rubocop
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # frozen_string_literal: true
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            # This file was generated by Bundler.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # The application 'rubocop' is installed as part of a gem, and
         | 
| 7 | 
            +
            # this file is here to facilitate running it.
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            require "pathname"
         | 
| 11 | 
            +
            ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
         | 
| 12 | 
            +
              Pathname.new(__FILE__).realpath)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            require "rubygems"
         | 
| 15 | 
            +
            require "bundler/setup"
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            load Gem.bin_path("rubocop", "rubocop")
         | 
    
        data/circle.yml
    CHANGED
    
    | @@ -20,8 +20,7 @@ jobs: | |
| 20 20 | 
             
                        docker cp . project:/app
         | 
| 21 21 | 
             
                        docker start project
         | 
| 22 22 | 
             
                        docker-compose build $SERVICE_NAME
         | 
| 23 | 
            -
                  - run: docker-compose run $SERVICE_NAME bin/ | 
| 24 | 
            -
                  - run: docker-compose run $SERVICE_NAME bin/m
         | 
| 23 | 
            +
                  - run: docker-compose run $SERVICE_NAME bin/ci
         | 
| 25 24 | 
             
              test-2-3:
         | 
| 26 25 | 
             
                <<: *test
         | 
| 27 26 | 
             
                docker:
         | 
| @@ -36,6 +35,14 @@ jobs: | |
| 36 35 | 
             
                    environment:
         | 
| 37 36 | 
             
                      COMPOSE_FILE: docker-compose.yml:docker-compose.ci.yml
         | 
| 38 37 | 
             
                      SERVICE_NAME: ruby-2-2
         | 
| 38 | 
            +
              test-docker-build:
         | 
| 39 | 
            +
                docker:
         | 
| 40 | 
            +
                  - image: docker
         | 
| 41 | 
            +
                steps:
         | 
| 42 | 
            +
                  - checkout
         | 
| 43 | 
            +
                  - setup_remote_docker:
         | 
| 44 | 
            +
                      version: 17.05.0-ce
         | 
| 45 | 
            +
                  - run: docker build .
         | 
| 39 46 | 
             
            workflows:
         | 
| 40 47 | 
             
              version: 2
         | 
| 41 48 | 
             
              test:
         | 
| @@ -43,3 +50,4 @@ workflows: | |
| 43 50 | 
             
                  - test-2-4
         | 
| 44 51 | 
             
                  - test-2-3
         | 
| 45 52 | 
             
                  - test-2-2
         | 
| 53 | 
            +
                  - test-docker-build
         | 
    
        data/exe/language_server-ruby
    CHANGED
    
    | @@ -5,4 +5,26 @@ if Dir.exist?(File.join(__dir__, "..", ".git")) | |
| 5 5 | 
             
            end
         | 
| 6 6 |  | 
| 7 7 | 
             
            require "language_server"
         | 
| 8 | 
            -
             | 
| 8 | 
            +
            require "optparse"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            options = { experimental_features_enabled: false }
         | 
| 11 | 
            +
            opt_parser = OptionParser.new do |opts|
         | 
| 12 | 
            +
              opts.banner = "Usage: language_server-ruby [options]"
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              opts.on("--experimental-features", "Enable experimental features") do |e|
         | 
| 15 | 
            +
                options[:experimental_features_enabled] = e
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              opts.on("-v", "--version", "Show version") do
         | 
| 19 | 
            +
                puts LanguageServer::VERSION
         | 
| 20 | 
            +
                exit
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
            begin
         | 
| 24 | 
            +
              opt_parser.parse!
         | 
| 25 | 
            +
            rescue OptionParser::InvalidOption
         | 
| 26 | 
            +
              puts opt_parser
         | 
| 27 | 
            +
              exit 1
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            LanguageServer.run(options)
         | 
    
        data/language_server.gemspec
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            lib = File.expand_path( | 
| 1 | 
            +
             | 
| 2 | 
            +
            lib = File.expand_path("../lib", __FILE__)
         | 
| 3 3 | 
             
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            -
            require  | 
| 4 | 
            +
            require "language_server/version"
         | 
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 7 | 
             
              spec.name          = "language_server"
         | 
| @@ -9,8 +9,8 @@ Gem::Specification.new do |spec| | |
| 9 9 | 
             
              spec.authors       = ["Fumiaki MATSUSHIMA"]
         | 
| 10 10 | 
             
              spec.email         = ["mtsmfm@gmail.com"]
         | 
| 11 11 |  | 
| 12 | 
            -
              spec.summary       =  | 
| 13 | 
            -
              spec.description   =  | 
| 12 | 
            +
              spec.summary       = "A Ruby Language Server implementation"
         | 
| 13 | 
            +
              spec.description   = "A Ruby Language Server implementation"
         | 
| 14 14 | 
             
              spec.homepage      = "https://github.com/mtsmfm/language_server-ruby"
         | 
| 15 15 | 
             
              spec.license       = "MIT"
         | 
| 16 16 |  | 
| @@ -19,25 +19,24 @@ Gem::Specification.new do |spec| | |
| 19 19 | 
             
                  f.match(%r{^(test|spec|features)/})
         | 
| 20 20 | 
             
                end
         | 
| 21 21 | 
             
              rescue
         | 
| 22 | 
            -
                Dir.glob("**/*").reject {|path| File.directory?(path) }
         | 
| 22 | 
            +
                Dir.glob("**/*").reject { |path| File.directory?(path) }
         | 
| 23 23 | 
             
              end
         | 
| 24 24 | 
             
              spec.bindir        = "exe"
         | 
| 25 25 | 
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 26 26 | 
             
              spec.require_paths = ["lib"]
         | 
| 27 27 |  | 
| 28 | 
            -
              spec.add_dependency "rcodetools"
         | 
| 29 28 | 
             
              spec.add_dependency "language_server-protocol", "0.4.0"
         | 
| 29 | 
            +
              spec.add_dependency "rcodetools"
         | 
| 30 30 |  | 
| 31 | 
            +
              spec.add_development_dependency "awesome_print"
         | 
| 32 | 
            +
              spec.add_development_dependency "benchmark-ips"
         | 
| 31 33 | 
             
              spec.add_development_dependency "bundler", "~> 1.14"
         | 
| 32 | 
            -
              spec.add_development_dependency "rake", "~> 10.0"
         | 
| 33 | 
            -
              spec.add_development_dependency "minitest", "~> 5.0"
         | 
| 34 34 | 
             
              spec.add_development_dependency "guard"
         | 
| 35 35 | 
             
              spec.add_development_dependency "guard-minitest"
         | 
| 36 | 
            +
              spec.add_development_dependency "m"
         | 
| 37 | 
            +
              spec.add_development_dependency "minitest", "~> 5.0"
         | 
| 36 38 | 
             
              spec.add_development_dependency "minitest-color"
         | 
| 37 | 
            -
              spec.add_development_dependency "pry-byebug"
         | 
| 38 39 | 
             
              spec.add_development_dependency "minitest-power_assert"
         | 
| 39 | 
            -
              spec.add_development_dependency " | 
| 40 | 
            -
              spec.add_development_dependency " | 
| 41 | 
            -
              spec.add_development_dependency "benchmark-ips"
         | 
| 42 | 
            -
              spec.add_development_dependency "rubocop"
         | 
| 40 | 
            +
              spec.add_development_dependency "pry-byebug"
         | 
| 41 | 
            +
              spec.add_development_dependency "rake", "~> 12.2"
         | 
| 43 42 | 
             
            end
         | 
    
        data/lib/language_server.rb
    CHANGED
    
    | @@ -13,7 +13,11 @@ require "json" | |
| 13 13 |  | 
| 14 14 | 
             
            module LanguageServer
         | 
| 15 15 | 
             
              class << self
         | 
| 16 | 
            -
                 | 
| 16 | 
            +
                attr_accessor :options
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def run(options)
         | 
| 19 | 
            +
                  self.options = options
         | 
| 20 | 
            +
             | 
| 17 21 | 
             
                  writer = Protocol::Transport::Stdio::Writer.new
         | 
| 18 22 | 
             
                  reader = Protocol::Transport::Stdio::Reader.new
         | 
| 19 23 | 
             
                  variables = {}
         | 
| @@ -37,16 +41,14 @@ module LanguageServer | |
| 37 41 |  | 
| 38 42 | 
             
                    method = request[:method].to_sym
         | 
| 39 43 |  | 
| 40 | 
            -
                     | 
| 41 | 
            -
                      k === method
         | 
| 42 | 
            -
                    }
         | 
| 44 | 
            +
                    subscriber = subscribers[method]
         | 
| 43 45 |  | 
| 44 46 | 
             
                    if subscriber
         | 
| 45 47 | 
             
                      keys = subscriber.parameters.map(&:last)
         | 
| 46 48 | 
             
                      result = subscriber.call(
         | 
| 47 49 | 
             
                        {
         | 
| 48 50 | 
             
                          request: request, notifier: writer.method(:notify), variables: variables
         | 
| 49 | 
            -
                        }.merge(variables).select {|k, _| keys.include?(k) }
         | 
| 51 | 
            +
                        }.merge(variables).select { |k, _| keys.include?(k) },
         | 
| 50 52 | 
             
                      )
         | 
| 51 53 |  | 
| 52 54 | 
             
                      if request[:id]
         | 
| @@ -58,6 +60,14 @@ module LanguageServer | |
| 58 60 | 
             
                  end
         | 
| 59 61 | 
             
                end
         | 
| 60 62 |  | 
| 63 | 
            +
                def rubocop_enabled?
         | 
| 64 | 
            +
                  options[:experimental_features_enabled]
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def adhoc_enabled?
         | 
| 68 | 
            +
                  options[:experimental_features_enabled]
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 61 71 | 
             
                def subscribers
         | 
| 62 72 | 
             
                  @subscribers ||= {}
         | 
| 63 73 | 
             
                end
         | 
| @@ -69,19 +79,22 @@ module LanguageServer | |
| 69 79 |  | 
| 70 80 | 
             
              on :initialize do |request:, variables:|
         | 
| 71 81 | 
             
                variables[:file_store] = FileStore.new(load_paths: $LOAD_PATH, remote_root: request[:params][:rootPath], local_root: Dir.getwd)
         | 
| 72 | 
            -
                variables[:project] = | 
| 82 | 
            +
                variables[:project] =
         | 
| 83 | 
            +
                  if LanguageServer.adhoc_enabled?
         | 
| 84 | 
            +
                    variables[:project] = Project.new(variables[:file_store])
         | 
| 85 | 
            +
                  end
         | 
| 73 86 |  | 
| 74 87 | 
             
                Protocol::Interface::InitializeResult.new(
         | 
| 75 88 | 
             
                  capabilities: Protocol::Interface::ServerCapabilities.new(
         | 
| 76 89 | 
             
                    text_document_sync: Protocol::Interface::TextDocumentSyncOptions.new(
         | 
| 77 | 
            -
                      change: Protocol::Constant::TextDocumentSyncKind::FULL
         | 
| 90 | 
            +
                      change: Protocol::Constant::TextDocumentSyncKind::FULL,
         | 
| 78 91 | 
             
                    ),
         | 
| 79 92 | 
             
                    completion_provider: Protocol::Interface::CompletionOptions.new(
         | 
| 80 93 | 
             
                      resolve_provider: true,
         | 
| 81 | 
            -
                      trigger_characters: %w | 
| 94 | 
            +
                      trigger_characters: %w[.],
         | 
| 82 95 | 
             
                    ),
         | 
| 83 | 
            -
                    definition_provider:  | 
| 84 | 
            -
                  )
         | 
| 96 | 
            +
                    definition_provider: LanguageServer.adhoc_enabled?,
         | 
| 97 | 
            +
                  ),
         | 
| 85 98 | 
             
                )
         | 
| 86 99 | 
             
              end
         | 
| 87 100 |  | 
| @@ -93,8 +106,10 @@ module LanguageServer | |
| 93 106 | 
             
                uri = request[:params][:textDocument][:uri]
         | 
| 94 107 | 
             
                text = request[:params][:contentChanges][0][:text]
         | 
| 95 108 | 
             
                file_store.cache(uri, text)
         | 
| 96 | 
            -
                project.recalculate_result(uri)
         | 
| 97 | 
            -
             | 
| 109 | 
            +
                project.recalculate_result(uri) if LanguageServer.adhoc_enabled?
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                diagnostics = Linter::RubyWC.new(text).call
         | 
| 112 | 
            +
                diagnostics += Linter::Rubocop.new(text).call if LanguageServer.rubocop_enabled?
         | 
| 98 113 |  | 
| 99 114 | 
             
                diagnostics = diagnostics.map do |error|
         | 
| 100 115 | 
             
                  Protocol::Interface::Diagnostic.new(
         | 
| @@ -103,13 +118,13 @@ module LanguageServer | |
| 103 118 | 
             
                    range: Protocol::Interface::Range.new(
         | 
| 104 119 | 
             
                      start: Protocol::Interface::Position.new(
         | 
| 105 120 | 
             
                        line: error.line_num,
         | 
| 106 | 
            -
                        character:  | 
| 121 | 
            +
                        character: error.characters.min,
         | 
| 107 122 | 
             
                      ),
         | 
| 108 123 | 
             
                      end: Protocol::Interface::Position.new(
         | 
| 109 124 | 
             
                        line: error.line_num,
         | 
| 110 | 
            -
                        character:  | 
| 111 | 
            -
                      )
         | 
| 112 | 
            -
                    )
         | 
| 125 | 
            +
                        character: error.characters.max,
         | 
| 126 | 
            +
                      ),
         | 
| 127 | 
            +
                    ),
         | 
| 113 128 | 
             
                  )
         | 
| 114 129 | 
             
                end
         | 
| 115 130 |  | 
| @@ -117,8 +132,8 @@ module LanguageServer | |
| 117 132 | 
             
                  method: :"textDocument/publishDiagnostics",
         | 
| 118 133 | 
             
                  params: Protocol::Interface::PublishDiagnosticsParams.new(
         | 
| 119 134 | 
             
                    uri: uri,
         | 
| 120 | 
            -
                    diagnostics: diagnostics
         | 
| 121 | 
            -
                  )
         | 
| 135 | 
            +
                    diagnostics: diagnostics,
         | 
| 136 | 
            +
                  ),
         | 
| 122 137 | 
             
                )
         | 
| 123 138 | 
             
              end
         | 
| 124 139 |  | 
| @@ -126,18 +141,20 @@ module LanguageServer | |
| 126 141 | 
             
                uri = request[:params][:textDocument][:uri]
         | 
| 127 142 | 
             
                line, character = request[:params][:position].fetch_values(:line, :character).map(&:to_i)
         | 
| 128 143 |  | 
| 129 | 
            -
                [
         | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
                 | 
| 144 | 
            +
                providers = [CompletionProvider::Rcodetools.new(uri: uri, line: line, character: character, file_store: file_store)]
         | 
| 145 | 
            +
                providers << CompletionProvider::AdHoc.new(uri: uri, line: line, character: character, project: project) if LanguageServer.adhoc_enabled?
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                providers.flat_map(&:call)
         | 
| 133 148 | 
             
              end
         | 
| 134 149 |  | 
| 135 150 | 
             
              on :"textDocument/definition" do |request:, project:|
         | 
| 136 151 | 
             
                uri = request[:params][:textDocument][:uri]
         | 
| 137 152 | 
             
                line, character = request[:params][:position].fetch_values(:line, :character).map(&:to_i)
         | 
| 138 153 |  | 
| 139 | 
            -
                 | 
| 140 | 
            -
                   | 
| 141 | 
            -
             | 
| 154 | 
            +
                if LanguageServer.adhoc_enabled?
         | 
| 155 | 
            +
                  [
         | 
| 156 | 
            +
                    DefinitionProvider::AdHoc.new(uri: uri, line: line, character: character, project: project),
         | 
| 157 | 
            +
                  ].flat_map(&:call)
         | 
| 158 | 
            +
                end
         | 
| 142 159 | 
             
              end
         | 
| 143 160 | 
             
            end
         |