vim-denops / denops.vim

🐜 An ecosystem of Vim/Neovim which allows developers to write cross-platform plugins in Deno
https://vim-denops.github.io/denops-documentation/
MIT License
685 stars 36 forks source link

:boom: Minor breaking changes #300

Closed lambdalisue closed 10 months ago

lambdalisue commented 10 months ago

🐛 Fix fire timing of DenopsReady autocmd

Previously, the DenopsReady autocmd was fired when the channel was connected. However, it is not the right timing because the denops itself may not be ready yet. This commit fixes the timing of the autocmd so that denops is ready when the autocmd is fired.

If this change cause issue, developers should use denops#server#wait() or denops#server#wait_async() function to ensure that functions are called AFTER denops got ready. For example

call denops#server#wait_async({ -> denops#plugin#load('...', '...') })

💥 Read meta only once in initialization

This is a minor but a breaking change. This change affects the g:denops#debug variable. After this commit, the variable must be configured prior to the denops initialization.

💥 Synchronously call wait_async() callbacks

It seems timer_start() triks is no longer needed so we can call callbacks synchronously in both cases.

Let me know if this cause acutal issues (it might break lazy loading mech of denops that are not tested by myself.)

💥 Remove g:denops#trace option

The trace feature is not available when denops liberates from Worker and the feature obstructs the development of denops.

💥 Remove DenopsPluginRegister:* autocmd

We are planning to change internal registration mechanism and the autocmd is not suited for the new mechanism.

Quick search on GitHub shows that the autocmd is not used by anyones.

https://github.com/search?q=DenopsPluginRegister&type=code

💥 Remove {options} from register, reload, discover

We found that developers always use mode: "skip" and other options are not necessary. So we decided to remove {options} from functions and always use mode: "skip".

Quick search revelaed that no one uses reload and discover with {options} but some (e.g. dein.vim) uses register with {options}.

That's why we introduced a new load function that replaces register.

Developers who need to support previous denops should use load whenever possible like:

try
  call denops#plugin#load(
        \ "denops-hello",
        \ "/path/to/denops-hello/main.ts",
        \)
catch /^Vim\%((\a\+)\)\=:E117:/
  " Fallback to `register` for backward compatibility
  call denops#plugin#register(
        \ "denops-hello",
        \ "/path/to/denops-hello/main.ts",
        \ {"mode": "skip"},
        \)
endtry

Summary by CodeRabbit

Summary by CodeRabbit

coderabbitai[bot] commented 10 months ago

Walkthrough

The updates across various Vim script and TypeScript files in Denops reflect a shift in plugin handling and message dispatching. The changes streamline the flow by centralizing meta information and refining control mechanisms. This reorganization suggests a move towards more efficient and maintainable code, particularly in the way plugins register and reload, and how the system handles internal notifications and service sessions.

Changes

File Path Change Summary
autoload/denops.vim Removed denops#trace configuration definition.
autoload/denops/_internal/server/chan.vim Replaced doautocmd with s:rpcnotify in s:connect function.
autoload/denops/plugin.vim Refactored plugin registration logic, deprecated denops#plugin#register(), and introduced a new function for plugin loading.
denops/@denops-private/cli.ts Updated handleConn function, added isMeta import.
denops/@denops-private/host/invoker.ts Removed meta parameter from load and reload methods.
denops/@denops-private/host/{nvim.ts, vim.ts} Updated message handling and dispatching, added #invoker field.
denops/@denops-private/service.ts Included meta property in the Service class, updated register and reload methods.
doc/denops.txt Added initialization requirement for g:denops#debug variable, renamed denops#server#stop() to denops#server#close().
plugin/denops.vim Removed autocmd, added call to denops#server#wait_async in s:init().
denops/@denops-private/worker/script.ts Removed trace parameter from main function's signature, updated related logic.

Poem

🐇 In the den of code, where plugins abide, 🌟 Refactoring's done with a swift, smooth stride. 🧩 Pieces align in a dance of the bytes, 🎉 CodeRabbit cheers for the streamlined delights!

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

Tips ### Chat with CodeRabbit Bot (`@coderabbitai`) - You can directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit-tests for this file.` - You can tag CodeRabbit on specific lines of code or entire files in the PR by tagging `@coderabbitai` in a comment. Examples: - `@coderabbitai generate unit tests for this file.` - `@coderabbitai modularize this function.` - You can tag `@coderabbitai` in a PR comment and ask questions about the PR and the codebase. Examples: - `@coderabbitai generate interesting stats about this repository from git and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit tests.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid.` - `@coderabbitai read the files in the src/scheduler package and generate README in the markdown format.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger a review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - The JSON schema for the configuration file is available [here](https://coderabbit.ai/integrations/coderabbit-overrides.v2.json). - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json` ### CodeRabbit Discord Community Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback.
codecov[bot] commented 10 months ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (b0812d3) 96.47% compared to head (be0bd9b) 96.47%.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## main #300 +/- ## ======================================= Coverage 96.47% 96.47% ======================================= Files 3 3 Lines 85 85 Branches 6 6 ======================================= Hits 82 82 Misses 3 3 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

lambdalisue commented 10 months ago

It seems tests are broken. I'll fix later

lambdalisue commented 10 months ago

Fixed

Shougo commented 10 months ago

The conflict exists.

Shougo commented 10 months ago

I will test it.