GithubHelp home page GithubHelp logo

gmh5225 / zls Goto Github PK

View Code? Open in Web Editor NEW

This project forked from zigtools/zls

0.0 0.0 0.0 5.24 MB

The @ziglang language server for all your Zig editor tooling needs, from autocomplete to goto-def!

Home Page: https://install.zigtools.org/

License: MIT License

Nix 0.10% Zig 99.90%

zls's Introduction

Zig Language Server

CI

Need support? Wanna help out? Join our Discord server!

The Zig Language Server (zls) is a tool that implements Microsoft's Language Server Protocol for Zig in Zig. In simpler terms: it'll provide you with completions, go-to definition, etc. when you write Zig code!

Table Of Contents

Installation

See the install zls tool for editor and binary installation instructions.

From Source

Building zls is very easy. You will need a build of Zig master to build zls.

git clone https://github.com/zigtools/zls
cd zls
zig build -Doptimize=ReleaseSafe

Build Options

Option Type Default Value What it Does
-Ddata_version string (like 0.7.1 or 0.9.0) master The data file version. This selects the files in the src/data folder that correspond to the Zig version being served.

Updating Data Files

Run zig build gen -- --generate-version-data master to update data files. This command will require an internet connection. You can replace master with a specific zig version like 0.10.0. Which version ZLS uses can be configured by passing the -Ddata_version parameter when building ZLS.

Configuration Options

You can configure zls by editing your zls.json configuration file. Running zls --show-config-path will show a path to an already existing zls.json or a path to the local configuration folder instead.

zls will look for a zls.json configuration file in multiple locations with the following priority:

  • In the local configuration folder of your OS (as provided by known-folders)
  • In the global configuration folder of your OS (as provided by known-folders)

The following options are currently available.

Option Type Default value What it Does
enable_snippets bool true Enables snippet completions when the client also supports them
enable_ast_check_diagnostics bool true Whether to enable ast-check diagnostics
enable_autofix bool true Whether to automatically fix errors on save. Currently supports adding and removing discards.
enable_import_embedfile_argument_completions bool true Whether to enable import/embedFile argument completions
semantic_tokens enum .full Set level of semantic tokens. Partial only includes information that requires semantic analysis.
enable_inlay_hints bool true Enables inlay hint support when the client also supports it
inlay_hints_show_builtin bool true Enable inlay hints for builtin functions
inlay_hints_exclude_single_argument bool true Don't show inlay hints for single argument calls
inlay_hints_hide_redundant_param_names bool false Hides inlay hints when parameter name matches the identifier (e.g. foo: foo)
inlay_hints_hide_redundant_param_names_last_token bool false Hides inlay hints when parameter name matches the last token of a parameter node (e.g. foo: bar.foo, foo: &foo)
operator_completions bool true Enables * and ? operators in completion lists
warn_style bool false Enables warnings for style guideline mismatches
highlight_global_var_declarations bool false Whether to highlight global var declarations
dangerous_comptime_experiments_do_not_enable bool false Whether to use the comptime interpreter
include_at_in_builtins bool false Whether the @ sign should be part of the completion of builtins
skip_std_references bool false When true, skips searching for references in std. Improves lookup speed for functions in user's code. Renaming and go-to-definition will continue to work as is
max_detail_length usize 1048576 The detail field of completions is truncated to be no longer than this (in bytes)
prefer_ast_check_as_child_process bool true Can be used in conjuction with enable_ast_check_diagnostics to favor using zig ast-check instead of ZLS's fork
record_session bool false When true, zls will record all request is receives and write in into record_session_path, so that they can replayed with zls replay
record_session_path ?[]const u8 null Output file path when record_session is set. The recommended file extension *.zlsreplay
replay_session_path ?[]const u8 null Used when calling zls replay for specifying the replay file. If no extra argument is given record_session_path is used as the default path.
builtin_path ?[]const u8 null Path to 'builtin;' useful for debugging, automatically set if let null
zig_lib_path ?[]const u8 null Zig library path, e.g. /path/to/zig/lib/zig, used to analyze std library imports
zig_exe_path ?[]const u8 null Zig executable path, e.g. /path/to/zig/zig, used to run the custom build runner. If null, zig is looked up in PATH. Will be used to infer the zig standard library path if none is provided
build_runner_path ?[]const u8 null Path to the build_runner.zig file provided by zls. null is equivalent to ${executable_directory}/build_runner.zig
global_cache_path ?[]const u8 null Path to a directory that will be used as zig's cache. null is equivalent to ${KnownFolders.Cache}/zls
build_runner_global_cache_path ?[]const u8 null Path to a directory that will be used as the global cache path when executing a projects build.zig. null is equivalent to the path shown by zig env

Per-build Configuration Options

The following options can be set on a per-project basis by placing zls.build.json in the project root directory next to build.zig.

Option Type Default value What it Does
relative_builtin_path ?[]const u8 null If present, this path is used to resolve @import("builtin")
build_options ?[]BuildOption null If present, this contains a list of user options to pass to the build. This is useful when options are used to conditionally add packages in build.zig.

BuildOption

BuildOption is defined as follows:

const BuildOption = struct {
    name: []const u8,
    value: ?[]const u8 = null,
};

When value is present, the option will be passed the same as in zig build -Dname=value. When value is null, the option will be passed as a flag instead as in zig build -Dflag.

Features

zls supports most language features, including simple type function support, using namespace, payload capture type resolution, custom packages, cImport and others. Support for comptime and semantic analysis is Work-in-Progress.

The following LSP features are supported:

  • Completions
  • Hover
  • Goto definition/declaration
  • Document symbols
  • Find references
  • Rename symbol
  • Formatting using zig fmt
  • Semantic token highlighting
  • Inlay hints
  • Code actions
  • Selection ranges
  • Folding regions

Using as a library

You can use zls as a library! Check out this demo repo for a good reference.

Related Projects

Quick Thanks :)

We'd like to take a second to thank all our awesome contributors and donators/backers/sponsors; if you have time or money to spare, consider partaking in either of these options - they help keep zls awesome for everyone!

OpenCollective Backers

License

MIT

zls's People

Contributors

alexnask avatar techatrix avatar superauguste avatar leecannon avatar nektro avatar luukdegram avatar llogick avatar fncontroloption avatar tau-dev avatar vexu avatar sergeeeek avatar ryuukk avatar acristoffers avatar matklad avatar falsepattern avatar sagehane avatar travisstaloch avatar bnjmnt4n avatar jcmoyer avatar leroycep avatar truemedian avatar prince213 avatar inkryption avatar fivemoreminix avatar antlilja avatar kubkon avatar gpanders avatar paoda avatar vesim987 avatar jefftime avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.