0.4.0 • Published 5 months ago

qlue-ls-web v0.4.0

Weekly downloads
-
License
SEE LICENSE IN LI...
Repository
github
Last release
5 months ago

⚡Qlue-ls (pronounced "clueless") is a blazingly fast language server for SPARQL, written in Rust 🦀.

!CAUTION This Project is still in an early stage.
Only the format capability is production ready.
The rest is experimental.

🚀 Getting Started

📦 Installation

Qlue-ls is available on crate.io:

cargo install --bin qlue-ls qlue-ls

And on PyPi:

pipx install qlue-ls

You can also build it from source:

git clone https://github.com/IoannisNezis/Qlue-ls.git
cd Qlue-ls
cargo build --release --bin qlue-ls

CLI Usage

To run Qlue-ls as formatter run:

qlue-ls format <PATH>

To run Qlue-ls as language server run:

qlue-ls server

This will create a language server listening on stdio.

with Neovim

After you installed the language server, add this to your init.lua:

vim.api.nvim_create_autocmd({ 'FileType' }, {
  desc = 'Connect to Qlue-ls',
  pattern = { 'sparql' },
  callback = function()
    vim.lsp.start {
      name = 'qlue-ls',
      cmd = { 'qlue-ls', 'server' },
      root_dir = vim.fn.getcwd(),
      on_attach = function(client, bufnr)
        vim.keymap.set('n', '<leader>f', vim.lsp.buf.format, { buffer = bufnr, desc = 'LSP: ' .. '[F]ormat' })
      end,
    }
  end,
})

Open a .rq file and check that the buffer is attached to th server:

:checkhealth lsp

Configure keymaps in on_attach function.

🚀 Capabilities

📐 Formatting

Status: Full support

Formats SPARQL queries to ensure consistent and readable syntax. Customizable options to align with preferred query styles are also implemented.

🩺 Diagnostics

Status: Partial support

provided diagnostics:

TypeNameDescription
❌ errorundefined prefixa used prefix is not declared
⚠️ warningunused prefixa declared prefix is not used
ℹ️ infouncompacted uria raw uncompacted uri is used

✨ Completion

Status: Partial support

I split auto-completion into 3 stages:

  1. Static (Keywords, constructs, ...)
  2. Dynamic offline (local defined variables)
  3. Dynamic online (with data from a knowledge-graph)

The implementation is in Stage 1.5. Static completion is done, dynamic offline completion is in development.

🛠️ Code Actions

Status: Partial support

namedescriptiondiagnostic
shorten urishorten uri into compacted formuncompacted uri
declare prefixdeclares undeclared prefix (if known)undeclared prefix
shorten all uri'sshorten all uri's into compacted form

⚙️ Configuration

Qlue-ls can be configured through a qlue-ls.toml or qlue-ls.yml file.

Here is the full default configuration

[format]
align_predicates = true
align_prefixes = false
separate_prolouge = false
capitalize_keywords = true
insert_spaces = true
tab_size = 2
where_new_line = false
filter_same_line = true

🌐 use in web

If you want to connect from a web-based-editor, you can use this package as well.
For this purpose this can be compiled to wasm and is available on npm:

npm i qlue-ls

You will have to wrap this in a Web Worker and provide a language server client. There will be more documentation on this in the future...

🙏 Special Thanks

0.4.0

5 months ago

0.3.5

5 months ago

0.3.4

5 months ago

0.3.3

5 months ago

0.3.2

6 months ago

0.3.1

6 months ago

0.2.3

6 months ago