neovim 0.9.1 → 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 +4 -4
- data/.github/workflows/tests.yml +2 -4
- data/CHANGELOG.md +5 -0
- data/Flavorfile.lock +1 -1
- data/README.md +11 -27
- data/lib/neovim/buffer.rb +12 -12
- data/lib/neovim/client.rb +22 -11
- data/lib/neovim/remote_module/dsl.rb +30 -0
- data/lib/neovim/remote_module.rb +42 -0
- data/lib/neovim/tabpage.rb +6 -1
- data/lib/neovim/version.rb +1 -1
- data/lib/neovim/window.rb +6 -1
- data/lib/neovim.rb +9 -0
- data/script/ci/download_nvim.sh +3 -3
- data/script/host_wrapper.bat +3 -0
- data/script/host_wrapper.sh +5 -0
- data/script/run_acceptance.rb +2 -2
- data/spec/acceptance/client_info_spec.vim +14 -30
- data/spec/acceptance/remote_module_spec.vim +13 -0
- data/spec/acceptance/runtime/example_remote_module.rb +11 -0
- data/spec/acceptance/runtime/init.vim +6 -1
- data/spec/acceptance/runtime/plugin/example_remote_module.lua +23 -0
- metadata +12 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5320dac4af30229401acf28acf82589d27523b419a65caaf6a9b32982be13559
         | 
| 4 | 
            +
              data.tar.gz: 1de09c53e257cce5c3b82902cd998a8b74601e452e25641e7e5f59fceed9bcaf
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5d4950d5edfd43619d9e2e3c4efccaee9ab9219cad3db41fd9d003262870ad2a98f77f3f76dba60c9fb17272fb0b0ad2982acdb1d9b8a31248e2c9ed494e27ec
         | 
| 7 | 
            +
              data.tar.gz: 8cc1963557bd46b91e4050363296b4d5b87bd7f1fcf736ac5bb1b6a324d4ec1c84baf2cc6069290c73108ec948af37a2fb57e78b3ec8c5c7622e13f1b6e31e65
         | 
    
        data/.github/workflows/tests.yml
    CHANGED
    
    | @@ -12,7 +12,7 @@ jobs: | |
| 12 12 | 
             
                  fail-fast: false
         | 
| 13 13 | 
             
                  matrix:
         | 
| 14 14 | 
             
                    os: [ubuntu-latest, macos-latest]
         | 
| 15 | 
            -
                    ruby: [ | 
| 15 | 
            +
                    ruby: [ruby, head]
         | 
| 16 16 | 
             
                runs-on: ${{ matrix.os }}
         | 
| 17 17 | 
             
                if: "!contains(github.event.head_commit.message, '[skip ci]')"
         | 
| 18 18 | 
             
                steps:
         | 
| @@ -37,8 +37,6 @@ jobs: | |
| 37 37 | 
             
              windows:
         | 
| 38 38 | 
             
                strategy:
         | 
| 39 39 | 
             
                  fail-fast: false
         | 
| 40 | 
            -
                  matrix:
         | 
| 41 | 
            -
                    ruby: [2.7, 3.0, 3.1, 3.2]
         | 
| 42 40 | 
             
                runs-on: windows-latest
         | 
| 43 41 | 
             
                if: "!contains(github.event.head_commit.message, '[skip ci]')"
         | 
| 44 42 | 
             
                steps:
         | 
| @@ -51,7 +49,7 @@ jobs: | |
| 51 49 | 
             
                      repository: neovim/neovim-ruby
         | 
| 52 50 | 
             
                  - uses: ruby/setup-ruby@v1
         | 
| 53 51 | 
             
                    with:
         | 
| 54 | 
            -
                      ruby-version:  | 
| 52 | 
            +
                      ruby-version: ruby
         | 
| 55 53 | 
             
                      bundler-cache: true
         | 
| 56 54 | 
             
                  - name: Install Neovim
         | 
| 57 55 | 
             
                    uses: crazy-max/ghaction-chocolatey@v1
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/Flavorfile.lock
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            thinca/vim-themis ( | 
| 1 | 
            +
            thinca/vim-themis (c1f4d465ce7dd23735513551b5c4c918d9c1bab1 at master)
         | 
    
        data/README.md
    CHANGED
    
    | @@ -42,37 +42,21 @@ client = Neovim.attach_unix("/tmp/nvim.sock") | |
| 42 42 |  | 
| 43 43 | 
             
            Refer to the [`Neovim` docs](https://www.rubydoc.info/github/neovim/neovim-ruby/main/Neovim) for other ways to connect to `nvim`, and the [`Neovim::Client` docs](https://www.rubydoc.info/github/neovim/neovim-ruby/main/Neovim/Client) for a summary of the client interface.
         | 
| 44 44 |  | 
| 45 | 
            -
            ###  | 
| 45 | 
            +
            ### Remote Modules
         | 
| 46 46 |  | 
| 47 | 
            -
             | 
| 47 | 
            +
            Remote modules allow users to define custom handlers in Ruby. To implement a remote module:
         | 
| 48 48 |  | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
              # line. This command is executed asynchronously, so the return value is
         | 
| 55 | 
            -
              # ignored.
         | 
| 56 | 
            -
              plug.command(:SetLine, nargs: 1) do |nvim, str|
         | 
| 57 | 
            -
                nvim.current.line = str
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
              # Define a function called "Sum" which adds two numbers. This function is
         | 
| 61 | 
            -
              # executed synchronously, so the result of the block will be returned to nvim.
         | 
| 62 | 
            -
              plug.function(:Sum, nargs: 2, sync: true) do |nvim, x, y|
         | 
| 63 | 
            -
                x + y
         | 
| 64 | 
            -
              end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
              # Define an autocmd for the BufEnter event on Ruby files.
         | 
| 67 | 
            -
              plug.autocmd(:BufEnter, pattern: "*.rb") do |nvim|
         | 
| 68 | 
            -
                nvim.command("echom 'Ruby file, eh?'")
         | 
| 69 | 
            -
              end
         | 
| 70 | 
            -
            end
         | 
| 71 | 
            -
            ```
         | 
| 49 | 
            +
            - Define your handlers in a plain Ruby script that imports `neovim`
         | 
| 50 | 
            +
            - Spawn the script from lua using `jobstart`
         | 
| 51 | 
            +
            - Define commands in lua using `nvim_create_user_command` that route to the job's channel ID
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            For usage examples, see:
         | 
| 72 54 |  | 
| 73 | 
            -
             | 
| 55 | 
            +
            - [`example_remote_module.rb`](spec/acceptance/runtime/example_remote_module.rb)
         | 
| 56 | 
            +
            - [`example_remote_module.lua`](spec/acceptance/runtime/plugin/example_remote_module.lua)
         | 
| 57 | 
            +
            - [`remote_module_spec.vim`](spec/acceptance/remote_module_spec.vim)
         | 
| 74 58 |  | 
| 75 | 
            -
             | 
| 59 | 
            +
            *Note*: Remote modules are a replacement for the deprecated "remote plugin" architecture. See https://github.com/neovim/neovim/issues/27949 for details.
         | 
| 76 60 |  | 
| 77 61 | 
             
            ### Vim Plugin Support
         | 
| 78 62 |  | 
    
        data/lib/neovim/buffer.rb
    CHANGED
    
    | @@ -4,7 +4,7 @@ require "neovim/line_range" | |
| 4 4 | 
             
            module Neovim
         | 
| 5 5 | 
             
              # Class representing an +nvim+ buffer.
         | 
| 6 6 | 
             
              #
         | 
| 7 | 
            -
              # The methods documented here were generated using NVIM v0. | 
| 7 | 
            +
              # The methods documented here were generated using NVIM v0.10.0
         | 
| 8 8 | 
             
              class Buffer < RemoteObject
         | 
| 9 9 | 
             
                attr_reader :lines
         | 
| 10 10 |  | 
| @@ -305,6 +305,17 @@ module Neovim | |
| 305 305 | 
             
              @param [Hash] opts
         | 
| 306 306 | 
             
              @return [Integer]
         | 
| 307 307 |  | 
| 308 | 
            +
            @method get_option(name)
         | 
| 309 | 
            +
              See +:h nvim_buf_get_option()+
         | 
| 310 | 
            +
              @param [String] name
         | 
| 311 | 
            +
              @return [Object]
         | 
| 312 | 
            +
             | 
| 313 | 
            +
            @method set_option(name, value)
         | 
| 314 | 
            +
              See +:h nvim_buf_set_option()+
         | 
| 315 | 
            +
              @param [String] name
         | 
| 316 | 
            +
              @param [Object] value
         | 
| 317 | 
            +
              @return [void]
         | 
| 318 | 
            +
             | 
| 308 319 | 
             
            @method get_extmark_by_id(ns_id, id, opts)
         | 
| 309 320 | 
             
              See +:h nvim_buf_get_extmark_by_id()+
         | 
| 310 321 | 
             
              @param [Integer] ns_id
         | 
| @@ -350,17 +361,6 @@ module Neovim | |
| 350 361 | 
             
              @param [Integer] line_end
         | 
| 351 362 | 
             
              @return [void]
         | 
| 352 363 |  | 
| 353 | 
            -
            @method get_option(name)
         | 
| 354 | 
            -
              See +:h nvim_buf_get_option()+
         | 
| 355 | 
            -
              @param [String] name
         | 
| 356 | 
            -
              @return [Object]
         | 
| 357 | 
            -
             | 
| 358 | 
            -
            @method set_option(name, value)
         | 
| 359 | 
            -
              See +:h nvim_buf_set_option()+
         | 
| 360 | 
            -
              @param [String] name
         | 
| 361 | 
            -
              @param [Object] value
         | 
| 362 | 
            -
              @return [void]
         | 
| 363 | 
            -
             | 
| 364 364 | 
             
            =end
         | 
| 365 365 | 
             
              end
         | 
| 366 366 | 
             
            end
         | 
    
        data/lib/neovim/client.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ module Neovim | |
| 9 9 | 
             
              # +RemoteObject+ subclasses (i.e. +Buffer+, +Window+, or +Tabpage+),
         | 
| 10 10 | 
             
              # which similarly have dynamically generated interfaces.
         | 
| 11 11 | 
             
              #
         | 
| 12 | 
            -
              # The methods documented here were generated using NVIM v0. | 
| 12 | 
            +
              # The methods documented here were generated using NVIM v0.10.0
         | 
| 13 13 | 
             
              #
         | 
| 14 14 | 
             
              # @see Buffer
         | 
| 15 15 | 
             
              # @see Window
         | 
| @@ -223,6 +223,16 @@ module Neovim | |
| 223 223 | 
             
              @param [String] name
         | 
| 224 224 | 
             
              @return [Hash]
         | 
| 225 225 |  | 
| 226 | 
            +
            @method get_option(name)
         | 
| 227 | 
            +
              See +:h nvim_get_option()+
         | 
| 228 | 
            +
              @param [String] name
         | 
| 229 | 
            +
              @return [Object]
         | 
| 230 | 
            +
             | 
| 231 | 
            +
            @method call_atomic(calls)
         | 
| 232 | 
            +
              See +:h nvim_call_atomic()+
         | 
| 233 | 
            +
              @param [Array] calls
         | 
| 234 | 
            +
              @return [Array]
         | 
| 235 | 
            +
             | 
| 226 236 | 
             
            @method create_namespace(name)
         | 
| 227 237 | 
             
              See +:h nvim_create_namespace()+
         | 
| 228 238 | 
             
              @param [String] name
         | 
| @@ -261,11 +271,6 @@ module Neovim | |
| 261 271 | 
             
              @param [Hash] opts
         | 
| 262 272 | 
             
              @return [Hash]
         | 
| 263 273 |  | 
| 264 | 
            -
            @method get_option(name)
         | 
| 265 | 
            -
              See +:h nvim_get_option()+
         | 
| 266 | 
            -
              @param [String] name
         | 
| 267 | 
            -
              @return [Object]
         | 
| 268 | 
            -
             | 
| 269 274 | 
             
            @method ui_attach(width, height, options)
         | 
| 270 275 | 
             
              See +:h nvim_ui_attach()+
         | 
| 271 276 | 
             
              @param [Integer] width
         | 
| @@ -314,6 +319,12 @@ module Neovim | |
| 314 319 | 
             
              @param [Float] col
         | 
| 315 320 | 
             
              @return [void]
         | 
| 316 321 |  | 
| 322 | 
            +
            @method ui_term_event(event, value)
         | 
| 323 | 
            +
              See +:h nvim_ui_term_event()+
         | 
| 324 | 
            +
              @param [String] event
         | 
| 325 | 
            +
              @param [Object] value
         | 
| 326 | 
            +
              @return [void]
         | 
| 327 | 
            +
             | 
| 317 328 | 
             
            @method get_hl_id_by_name(name)
         | 
| 318 329 | 
             
              See +:h nvim_get_hl_id_by_name()+
         | 
| 319 330 | 
             
              @param [String] name
         | 
| @@ -332,6 +343,11 @@ module Neovim | |
| 332 343 | 
             
              @param [Hash] val
         | 
| 333 344 | 
             
              @return [void]
         | 
| 334 345 |  | 
| 346 | 
            +
            @method get_hl_ns(opts)
         | 
| 347 | 
            +
              See +:h nvim_get_hl_ns()+
         | 
| 348 | 
            +
              @param [Hash] opts
         | 
| 349 | 
            +
              @return [Integer]
         | 
| 350 | 
            +
             | 
| 335 351 | 
             
            @method set_hl_ns(ns_id)
         | 
| 336 352 | 
             
              See +:h nvim_set_hl_ns()+
         | 
| 337 353 | 
             
              @param [Integer] ns_id
         | 
| @@ -613,11 +629,6 @@ module Neovim | |
| 613 629 | 
             
              See +:h nvim_list_chans()+
         | 
| 614 630 | 
             
              @return [Array]
         | 
| 615 631 |  | 
| 616 | 
            -
            @method call_atomic(calls)
         | 
| 617 | 
            -
              See +:h nvim_call_atomic()+
         | 
| 618 | 
            -
              @param [Array] calls
         | 
| 619 | 
            -
              @return [Array]
         | 
| 620 | 
            -
             | 
| 621 632 | 
             
            @method list_uis
         | 
| 622 633 | 
             
              See +:h nvim_list_uis()+
         | 
| 623 634 | 
             
              @return [Array]
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            module Neovim
         | 
| 2 | 
            +
              class RemoteModule
         | 
| 3 | 
            +
                # The DSL exposed in +Neovim.start_remote+ blocks.
         | 
| 4 | 
            +
                #
         | 
| 5 | 
            +
                # @api public
         | 
| 6 | 
            +
                class DSL < BasicObject
         | 
| 7 | 
            +
                  attr_reader :handlers
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def initialize(&block)
         | 
| 10 | 
            +
                    @handlers = ::Hash.new do |h, name|
         | 
| 11 | 
            +
                      h[name] = ::Proc.new do |_, *|
         | 
| 12 | 
            +
                        raise NotImplementedError, "undefined handler #{name.inspect}"
         | 
| 13 | 
            +
                      end
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    block&.call(self)
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  # Define an RPC handler for use in remote modules.
         | 
| 20 | 
            +
                  #
         | 
| 21 | 
            +
                  # @param name [String] The handler name.
         | 
| 22 | 
            +
                  # @param block [Proc] The body of the handler.
         | 
| 23 | 
            +
                  def register_handler(name, &block)
         | 
| 24 | 
            +
                    @handlers[name.to_s] = ::Proc.new do |client, *args|
         | 
| 25 | 
            +
                      block.call(client, *args)
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            require "neovim/client"
         | 
| 2 | 
            +
            require "neovim/event_loop"
         | 
| 3 | 
            +
            require "neovim/logging"
         | 
| 4 | 
            +
            require "neovim/remote_module/dsl"
         | 
| 5 | 
            +
            require "neovim/session"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module Neovim
         | 
| 8 | 
            +
              class RemoteModule
         | 
| 9 | 
            +
                include Logging
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def self.from_config_block(&block)
         | 
| 12 | 
            +
                  new(DSL::new(&block).handlers)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def initialize(handlers)
         | 
| 16 | 
            +
                  @handlers = handlers
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def start
         | 
| 20 | 
            +
                  event_loop = EventLoop.stdio
         | 
| 21 | 
            +
                  session = Session.new(event_loop)
         | 
| 22 | 
            +
                  client = nil
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  session.run do |message|
         | 
| 25 | 
            +
                    case message
         | 
| 26 | 
            +
                    when Message::Request
         | 
| 27 | 
            +
                      begin
         | 
| 28 | 
            +
                        client ||= Client.from_event_loop(event_loop, session)
         | 
| 29 | 
            +
                        args = message.arguments.flatten(1)
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                        @handlers[message.method_name].call(client, *args).tap do |rv|
         | 
| 32 | 
            +
                          session.respond(message.id, rv, nil) if message.sync?
         | 
| 33 | 
            +
                        end
         | 
| 34 | 
            +
                      rescue => e
         | 
| 35 | 
            +
                        log_exception(:error, e, __method__)
         | 
| 36 | 
            +
                        session.respond(message.id, nil, e.message) if message.sync?
         | 
| 37 | 
            +
                      end
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
    
        data/lib/neovim/tabpage.rb
    CHANGED
    
    | @@ -3,7 +3,7 @@ require "neovim/remote_object" | |
| 3 3 | 
             
            module Neovim
         | 
| 4 4 | 
             
              # Class representing an +nvim+ tabpage.
         | 
| 5 5 | 
             
              #
         | 
| 6 | 
            -
              # The methods documented here were generated using NVIM v0. | 
| 6 | 
            +
              # The methods documented here were generated using NVIM v0.10.0
         | 
| 7 7 | 
             
              class Tabpage < RemoteObject
         | 
| 8 8 | 
             
            # The following methods are dynamically generated.
         | 
| 9 9 | 
             
            =begin
         | 
| @@ -31,6 +31,11 @@ module Neovim | |
| 31 31 | 
             
              See +:h nvim_tabpage_get_win()+
         | 
| 32 32 | 
             
              @return [Window]
         | 
| 33 33 |  | 
| 34 | 
            +
            @method set_win(win)
         | 
| 35 | 
            +
              See +:h nvim_tabpage_set_win()+
         | 
| 36 | 
            +
              @param [Window] win
         | 
| 37 | 
            +
              @return [void]
         | 
| 38 | 
            +
             | 
| 34 39 | 
             
            @method get_number
         | 
| 35 40 | 
             
              See +:h nvim_tabpage_get_number()+
         | 
| 36 41 | 
             
              @return [Integer]
         | 
    
        data/lib/neovim/version.rb
    CHANGED
    
    
    
        data/lib/neovim/window.rb
    CHANGED
    
    | @@ -3,7 +3,7 @@ require "neovim/remote_object" | |
| 3 3 | 
             
            module Neovim
         | 
| 4 4 | 
             
              # Class representing an +nvim+ window.
         | 
| 5 5 | 
             
              #
         | 
| 6 | 
            -
              # The methods documented here were generated using NVIM v0. | 
| 6 | 
            +
              # The methods documented here were generated using NVIM v0.10.0
         | 
| 7 7 | 
             
              class Window < RemoteObject
         | 
| 8 8 | 
             
                # Get the buffer displayed in the window
         | 
| 9 9 | 
             
                #
         | 
| @@ -171,6 +171,11 @@ module Neovim | |
| 171 171 | 
             
              @param [Integer] ns_id
         | 
| 172 172 | 
             
              @return [void]
         | 
| 173 173 |  | 
| 174 | 
            +
            @method text_height(opts)
         | 
| 175 | 
            +
              See +:h nvim_win_text_height()+
         | 
| 176 | 
            +
              @param [Hash] opts
         | 
| 177 | 
            +
              @return [Hash]
         | 
| 178 | 
            +
             | 
| 174 179 | 
             
            =end
         | 
| 175 180 | 
             
              end
         | 
| 176 181 | 
             
            end
         | 
    
        data/lib/neovim.rb
    CHANGED
    
    | @@ -4,6 +4,7 @@ require "neovim/session" | |
| 4 4 | 
             
            require "neovim/event_loop"
         | 
| 5 5 | 
             
            require "neovim/executable"
         | 
| 6 6 | 
             
            require "neovim/logging"
         | 
| 7 | 
            +
            require "neovim/remote_module"
         | 
| 7 8 | 
             
            require "neovim/version"
         | 
| 8 9 |  | 
| 9 10 | 
             
            # The main entrypoint to the +Neovim+ gem. It allows you to connect to a
         | 
| @@ -83,6 +84,14 @@ module Neovim | |
| 83 84 | 
             
                attach(EventLoop.child(argv))
         | 
| 84 85 | 
             
              end
         | 
| 85 86 |  | 
| 87 | 
            +
              # Start a remote module process with handlers defined in the config block.
         | 
| 88 | 
            +
              # Blocks indefinitely to handle messages.
         | 
| 89 | 
            +
              #
         | 
| 90 | 
            +
              # @see RemoteModule::DSL
         | 
| 91 | 
            +
              def self.start_remote(&block)
         | 
| 92 | 
            +
                RemoteModule.from_config_block(&block).start
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
             | 
| 86 95 | 
             
              # Placeholder method for exposing the remote plugin DSL. This gets
         | 
| 87 96 | 
             
              # temporarily overwritten in +Host::Loader#load+.
         | 
| 88 97 | 
             
              #
         | 
    
        data/script/ci/download_nvim.sh
    CHANGED
    
    | @@ -7,9 +7,9 @@ set -eu | |
| 7 7 | 
             
            case "$(echo "$RUNNER_OS" | tr "[:upper:]" "[:lower:]")" in
         | 
| 8 8 | 
             
              macos)
         | 
| 9 9 | 
             
                wget -nv -P /tmp \
         | 
| 10 | 
            -
                  "https://github.com/neovim/neovim/releases/download/stable/nvim-macos.tar.gz"
         | 
| 11 | 
            -
                tar -C /tmp -xzf /tmp/nvim-macos.tar.gz
         | 
| 12 | 
            -
                mv /tmp/nvim-macos ./_nvim
         | 
| 10 | 
            +
                  "https://github.com/neovim/neovim/releases/download/stable/nvim-macos-x86_64.tar.gz"
         | 
| 11 | 
            +
                tar -C /tmp -xzf /tmp/nvim-macos-x86_64.tar.gz
         | 
| 12 | 
            +
                mv /tmp/nvim-macos-x86_64 ./_nvim
         | 
| 13 13 | 
             
                ;;
         | 
| 14 14 | 
             
              linux)
         | 
| 15 15 | 
             
                mkdir -p _nvim/bin
         | 
    
        data/script/run_acceptance.rb
    CHANGED
    
    | @@ -21,7 +21,7 @@ env = { | |
| 21 21 | 
             
              "NVIM_RPLUGIN_MANIFEST" => manifest,
         | 
| 22 22 | 
             
              "THEMIS_VIM" => nvim,
         | 
| 23 23 | 
             
              "THEMIS_HOME" => themis_home,
         | 
| 24 | 
            -
              "THEMIS_ARGS" => "-e  | 
| 24 | 
            +
              "THEMIS_ARGS" => "-e --headless -u #{vimrc}"
         | 
| 25 25 | 
             
            }
         | 
| 26 26 |  | 
| 27 27 | 
             
            FileUtils.rm_f(manifest)
         | 
| @@ -30,7 +30,7 @@ Dir.chdir(root) do | |
| 30 30 | 
             
              system(
         | 
| 31 31 | 
             
                env,
         | 
| 32 32 | 
             
                nvim,
         | 
| 33 | 
            -
                "-e", " | 
| 33 | 
            +
                "-e", "--headless",
         | 
| 34 34 | 
             
                "-u", vimrc,
         | 
| 35 35 | 
             
                "+UpdateRemotePlugins", "+qa!"
         | 
| 36 36 | 
             
              )
         | 
| @@ -9,34 +9,18 @@ function! s:suite.before_each() abort | |
| 9 9 | 
             
                    \ "v:val.client")
         | 
| 10 10 | 
             
            endfunction
         | 
| 11 11 |  | 
| 12 | 
            -
            function! s:suite. | 
| 13 | 
            -
               | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
               | 
| 26 | 
            -
            endfunction
         | 
| 27 | 
            -
             | 
| 28 | 
            -
            function! s:suite.get_rplugin_client_info() abort
         | 
| 29 | 
            -
              let client_info = s:client_chans[0]
         | 
| 30 | 
            -
             | 
| 31 | 
            -
              call s:expect(sort(keys(client_info))).to_equal(
         | 
| 32 | 
            -
                    \ ["attributes", "methods", "name", "type", "version"])
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              call s:expect(client_info.attributes).to_be_dict()
         | 
| 35 | 
            -
              call s:expect(client_info.methods).to_equal({"specs": {"nargs": 1}, "poll": {}})
         | 
| 36 | 
            -
              call s:expect(client_info.name).to_equal("ruby-rplugin-host")
         | 
| 37 | 
            -
              call s:expect(client_info.type).to_equal("host")
         | 
| 38 | 
            -
             | 
| 39 | 
            -
              call s:expect(client_info.version.major).to_be_number()
         | 
| 40 | 
            -
              call s:expect(client_info.version.minor).to_be_number()
         | 
| 41 | 
            -
              call s:expect(client_info.version.patch).to_be_number()
         | 
| 12 | 
            +
            function! s:suite.get_client_info() abort
         | 
| 13 | 
            +
              for client_info in s:client_chans
         | 
| 14 | 
            +
                call s:expect(sort(keys(client_info))).to_equal(
         | 
| 15 | 
            +
                      \ ["attributes", "methods", "name", "type", "version"])
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                call s:expect(client_info.attributes).to_be_dict()
         | 
| 18 | 
            +
                call s:expect(client_info.methods).to_equal({"specs": {"nargs": 1}, "poll": {}})
         | 
| 19 | 
            +
                call s:expect(client_info.name).to_match("ruby-\\(script\\|rplugin\\)-host")
         | 
| 20 | 
            +
                call s:expect(client_info.type).to_equal("host")
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                call s:expect(client_info.version.major).to_be_number()
         | 
| 23 | 
            +
                call s:expect(client_info.version.minor).to_be_number()
         | 
| 24 | 
            +
                call s:expect(client_info.version.patch).to_be_number()
         | 
| 25 | 
            +
              endfor
         | 
| 42 26 | 
             
            endfunction
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            let s:suite = themis#suite("Remote module")
         | 
| 2 | 
            +
            let s:expect = themis#helper("expect")
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            call themis#helper('command').with(s:)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            function! s:suite.defines_commands() abort
         | 
| 7 | 
            +
              RbSetVar set_from_rb_mod foobar
         | 
| 8 | 
            +
              call s:expect(g:set_from_rb_mod).to_equal('foobar')
         | 
| 9 | 
            +
            endfunction
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            function! s:suite.propagates_errors() abort
         | 
| 12 | 
            +
              Throws /oops/ :RbWillRaise
         | 
| 13 | 
            +
            endfunction
         | 
| @@ -1,7 +1,12 @@ | |
| 1 1 | 
             
            let s:lib_path = getcwd() . "/lib"
         | 
| 2 2 | 
             
            let s:exe_path = getcwd() . "/exe/neovim-ruby-host"
         | 
| 3 3 | 
             
            let g:acceptance_rtp = getcwd() . "/spec/acceptance/runtime"
         | 
| 4 | 
            -
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            if has("win32") || has("win64")
         | 
| 6 | 
            +
              let g:ruby_host_prog = getcwd() . "/script/host_wrapper.bat"
         | 
| 7 | 
            +
            else
         | 
| 8 | 
            +
              let g:ruby_host_prog = getcwd() . "/script/host_wrapper.sh"
         | 
| 9 | 
            +
            endif
         | 
| 5 10 |  | 
| 6 11 | 
             
            ruby require "rspec/expectations"
         | 
| 7 12 | 
             
            ruby include ::RSpec::Matchers.dup
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            local chan
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            local function ensure_job()
         | 
| 4 | 
            +
              if chan then
         | 
| 5 | 
            +
                return chan
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              chan = vim.fn.jobstart({
         | 
| 9 | 
            +
                'ruby',
         | 
| 10 | 
            +
                '-I', 'lib',
         | 
| 11 | 
            +
                'spec/acceptance/runtime/example_remote_module.rb',
         | 
| 12 | 
            +
              }, { rpc = true })
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              return chan
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            vim.api.nvim_create_user_command('RbSetVar', function(args)
         | 
| 18 | 
            +
              vim.fn.rpcrequest(ensure_job(), 'rb_set_var', args.fargs)
         | 
| 19 | 
            +
            end, { nargs = '*' })
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            vim.api.nvim_create_user_command('RbWillRaise', function(args)
         | 
| 22 | 
            +
              vim.fn.rpcrequest(ensure_job(), 'rb_will_raise', args.fargs)
         | 
| 23 | 
            +
            end, { nargs = 0 })
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: neovim
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.10.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Alex Genco
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2024-06-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: msgpack
         | 
| @@ -160,6 +160,8 @@ files: | |
| 160 160 | 
             
            - lib/neovim/plugin.rb
         | 
| 161 161 | 
             
            - lib/neovim/plugin/dsl.rb
         | 
| 162 162 | 
             
            - lib/neovim/plugin/handler.rb
         | 
| 163 | 
            +
            - lib/neovim/remote_module.rb
         | 
| 164 | 
            +
            - lib/neovim/remote_module/dsl.rb
         | 
| 163 165 | 
             
            - lib/neovim/remote_object.rb
         | 
| 164 166 | 
             
            - lib/neovim/ruby_provider.rb
         | 
| 165 167 | 
             
            - lib/neovim/ruby_provider/buffer_ext.rb
         | 
| @@ -174,10 +176,13 @@ files: | |
| 174 176 | 
             
            - script/ci/download_nvim.sh
         | 
| 175 177 | 
             
            - script/dump_api.rb
         | 
| 176 178 | 
             
            - script/generate_docs.rb
         | 
| 179 | 
            +
            - script/host_wrapper.bat
         | 
| 180 | 
            +
            - script/host_wrapper.sh
         | 
| 177 181 | 
             
            - script/j2mp.rb
         | 
| 178 182 | 
             
            - script/mp2j.rb
         | 
| 179 183 | 
             
            - script/run_acceptance.rb
         | 
| 180 184 | 
             
            - spec/acceptance/client_info_spec.vim
         | 
| 185 | 
            +
            - spec/acceptance/remote_module_spec.vim
         | 
| 181 186 | 
             
            - spec/acceptance/rplugin_autocmd_spec.vim
         | 
| 182 187 | 
             
            - spec/acceptance/rplugin_command_spec.vim
         | 
| 183 188 | 
             
            - spec/acceptance/rplugin_function_spec.vim
         | 
| @@ -196,7 +201,9 @@ files: | |
| 196 201 | 
             
            - spec/acceptance/rubyfile/set_pwd_after.rb
         | 
| 197 202 | 
             
            - spec/acceptance/rubyfile/set_pwd_before.rb
         | 
| 198 203 | 
             
            - spec/acceptance/rubyfile_spec.vim
         | 
| 204 | 
            +
            - spec/acceptance/runtime/example_remote_module.rb
         | 
| 199 205 | 
             
            - spec/acceptance/runtime/init.vim
         | 
| 206 | 
            +
            - spec/acceptance/runtime/plugin/example_remote_module.lua
         | 
| 200 207 | 
             
            - spec/acceptance/runtime/rplugin/ruby/autocmds.rb
         | 
| 201 208 | 
             
            - spec/acceptance/runtime/rplugin/ruby/commands.rb
         | 
| 202 209 | 
             
            - spec/acceptance/runtime/rplugin/ruby/functions.rb
         | 
| @@ -250,6 +257,7 @@ specification_version: 4 | |
| 250 257 | 
             
            summary: A Ruby client for Neovim
         | 
| 251 258 | 
             
            test_files:
         | 
| 252 259 | 
             
            - spec/acceptance/client_info_spec.vim
         | 
| 260 | 
            +
            - spec/acceptance/remote_module_spec.vim
         | 
| 253 261 | 
             
            - spec/acceptance/rplugin_autocmd_spec.vim
         | 
| 254 262 | 
             
            - spec/acceptance/rplugin_command_spec.vim
         | 
| 255 263 | 
             
            - spec/acceptance/rplugin_function_spec.vim
         | 
| @@ -268,7 +276,9 @@ test_files: | |
| 268 276 | 
             
            - spec/acceptance/rubyfile/set_pwd_after.rb
         | 
| 269 277 | 
             
            - spec/acceptance/rubyfile/set_pwd_before.rb
         | 
| 270 278 | 
             
            - spec/acceptance/rubyfile_spec.vim
         | 
| 279 | 
            +
            - spec/acceptance/runtime/example_remote_module.rb
         | 
| 271 280 | 
             
            - spec/acceptance/runtime/init.vim
         | 
| 281 | 
            +
            - spec/acceptance/runtime/plugin/example_remote_module.lua
         | 
| 272 282 | 
             
            - spec/acceptance/runtime/rplugin/ruby/autocmds.rb
         | 
| 273 283 | 
             
            - spec/acceptance/runtime/rplugin/ruby/commands.rb
         | 
| 274 284 | 
             
            - spec/acceptance/runtime/rplugin/ruby/functions.rb
         |