ctrl+shift+p filters: :st2 :st3 :win :osx :linux
Browse

Sublime​Linter-any-lsp

by kaste ST4

SublimeLinter adapter to any LSP server

Details

Installs

  • Total 76
  • Win 41
  • Mac 10
  • Linux 25
Mar 3 Mar 2 Mar 1 Feb 28 Feb 27 Feb 26 Feb 25 Feb 24 Feb 23 Feb 22 Feb 21 Feb 20 Feb 19 Feb 18 Feb 17 Feb 16 Feb 15 Feb 14 Feb 13 Feb 12 Feb 11 Feb 10 Feb 9 Feb 8 Feb 7 Feb 6 Feb 5 Feb 4 Feb 3 Feb 2 Feb 1 Jan 31 Jan 30 Jan 29 Jan 28 Jan 27 Jan 26 Jan 25 Jan 24 Jan 23 Jan 22 Jan 21 Jan 20 Jan 19 Jan 18
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 2 0 0 1 0 0
Mac 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

Readme

Source
raw.​githubusercontent.​com

SublimeLinter-any-lsp 🎴

SublimeLinter-any-lsp is a plugin for SublimeLinter that allows you to use Language Server Protocol (LSP) servers as linters within Sublime Text.

Status

I use it since May 2024. Needs spread and contributions. Unsure about which parts (if any) should be ported to SublimeLinter core. Lack of time to make it shine, also maybe, because it just works for me.

How It Works

This package implements a generic linter backend (AnyLSP) for SublimeLinter. It communicates with LSP servers, sends file contents, and parses diagnostics messages from the server to display them as linting errors/warnings in Sublime Text.

  • Each LSP server defined by a linter class (e.g., Ruff, Pyright, Eslint) as usual, inheriting AnyLSP instead of Linter.
  • Diagnostic messages from the LSP server are mapped to SublimeLinter errors and warnings.

Design

Be open, user-friendly, playful.

# Make a config
config = ServerConfig(
    "ruff-lsp",
    ("ruff", "server", "--preview"),
    "/user/knowles/and-her-working-dir",
)
# and ask for a server attached to a view
ensure_server_for_view(config, view)
# or a plain server
server = ensure_server(config)
# and communicate with it
req = server.request("textDocument/diagnostic", inflate({
    "textDocument.uri": canoncial_uri_for_view(self.view),
}))

@req.on_response
def on_diagnostics(msg):
    ....

# done.  Idle servers shutdown automatically. 🌆

Example Linter Classes

class Ruff(AnyLSP):
    name = "ruff-lsp"
    cmd = ("ruff", "server", "--preview")
    defaults = {"selector": "source.python"}

class Pyright(AnyLSP):
    name = "pyright-lsp"
    cmd = ("pyright-langserver", "--stdio")
    defaults = {
        "disable": True,
        "selector": "source.python",
        "settings": {
            "python.analysis.autoSearchPaths": True,
            "python.analysis.diagnosticMode": "openFilesOnly",
            "python.analysis.useLibraryCodeForTypes": True,
        }
    }

Installation

Manual only. Not listed on PackageControl

Usage

  • Ships ruff-lsp, pyright and eslint out-of-the-box
  • Any other LSP (-configuration) must be added here, as a separate (private or public) package, or just in your User folder as a plugin.

Configuration

Each linter class may be configured through SublimeLinter's settings system. For example, to enable or disable specific servers, or to pass settings to the underlying LSP.

Example:

"SublimeLinter.linters.ruff-lsp.selector": "source.python",

Contributing

Contributions are welcome! Please open issues or pull requests for bug fixes, new features, or improvements.

License

MIT