Skip to content

tact-lang/tact-language-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tact Language Server

Developed by TON Studio, powered by the community.

FeaturesInstallationCommunityTroubleshooting

Twitter Telegram Telegram


This language server/extension provides support for the Tact programming language. Tact is a next-generation programming language for building secure, scalable, and maintainable smart contracts on TON blockchain.

Features

Quick start

The easiest way to get started with Tact is to use VS Code or editors based on it:

  1. Install the Tact language extension in VS Code or in VS Code-based editors
  2. That's it!

editor.png

Installation

VS Code / VSCodium / Cursor / Windsurf

  1. Get the latest .vsix file from releases from VS Code marketplace or from Open VSX Registry
  2. In VS Code:
    • Open the Command Palette (Ctrl+Shift+P or Cmd+Shift+P)
    • Type "Install from VSIX"
    • Select the downloaded .vsix file
    • Reload VS Code

Other Editors

  1. Get the latest archive from releases:
    • tact-language-server-*.tar.gz for Linux/macOS
    • tact-language-server-*.zip for Windows
  2. Extract it to a convenient location
  3. Configure your editor to use the language server (see editor-specific instructions below)

Building from Source

If you want to build the language server yourself:

git clone https://github.com/tact-lang/tact-language-server
cd tact-language-server
yarn install
yarn build

To obtain the .vsix package with the VS Code extension, additionally run:

yarn package

Then run either of those to install the extension from the .vsix package:

# VSCode, replace VERSION with the actual version from package.json
code --install-extension vscode-tact-VERSION.vsix

# VSCodium, replace VERSION with the actual version from package.json
codium --install-extension vscode-tact-VERSION.vsix

Editor Setup

Sublime Text

  1. Install LSP package:

    • Open Command Palette (Ctrl+Shift+P or Cmd+Shift+P)
    • Select "Package Control: Install Package"
    • Search for and select "LSP"
  2. Install the Tact package via Package Control for syntax highlighting

  3. Add the following configuration to your LSP settings (Preferences > Package Settings > LSP > Settings):

    {
        "clients": {
            "tact": {
                "enabled": true,
                "command": ["node", "path/to/language-server/dist/server.js", "--stdio"],
                "selector": "source.tact"
            }
        },
        "inhibit_snippet_completions": true
    }
  4. Create a new file with the .tact extension to verify the setup

Neovim

Prerequisites:

Setup steps:

  1. Add tact.lua to your lua/lspconfig/server_configurations directory with the following content:

    local util = require 'lspconfig.util'
    
    return {
      default_config = {
        cmd = { 'node', '/absolute/path/to/language-server/dist/server.js', '--stdio' },
        filetypes = { 'tact' },
        root_dir = util.root_pattern('package.json', '.git'),
      },
      docs = {
        description = [[
          Tact Language Server
          https://github.com/tact-lang/tact-language-server
        ]],
        default_config = {
          root_dir = [[root_pattern("package.json", ".git")]],
        },
      },
    }
  2. Add the following to your init.lua:

    require'lspconfig'.tact.setup {}

Vim

Prerequisites:

  • Vim 8 or newer
  • Async LSP Client for Vim: vim-lsp
  • Plugin for Tact: tact.vim

Recommended, but not required:

Setup steps:

  1. Install the tact.vim if it hasn't already been installed. Prefer using a non-builtin plugin manager to get new updates easily.

  2. Install the vim-lsp plugin if it isn't already installed. For that, use vim-plug or the built-in package manager of Vim 8+, see :help packages.

  • If it wasn't installed before, you'll need to set up basic keybindings with the language client. Add the following to your ~/.vimrc (or ~/_vimrc if you're on Windows), or modify your preferences:

    function! s:on_lsp_buffer_enabled() abort
        setlocal omnifunc=lsp#complete
        setlocal signcolumn=yes
        if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
        nmap <buffer> gd <plug>(lsp-definition)
        nmap <buffer> gs <plug>(lsp-document-symbol-search)
        nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
        nmap <buffer> gr <plug>(lsp-references)
        nmap <buffer> gi <plug>(lsp-implementation)
        nmap <buffer> gt <plug>(lsp-type-definition)
        nmap <buffer> <leader>rn <plug>(lsp-rename)
        nmap <buffer> [g <plug>(lsp-previous-diagnostic)
        nmap <buffer> ]g <plug>(lsp-next-diagnostic)
        nmap <buffer> K <plug>(lsp-hover)
        nnoremap <buffer> <expr><c-f> lsp#scroll(+4)
        nnoremap <buffer> <expr><c-d> lsp#scroll(-4)
    
        let g:lsp_format_sync_timeout = 1000
        autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
    
        " Refer to the doc to add more commands:
        " https://github.com/prabirshrestha/vim-lsp#supported-commands
    endfunction
    
    augroup lsp_install
        au!
        " call s:on_lsp_buffer_enabled only for languages that have the server registered.
        autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
    augroup END
  1. Add the following to your ~/.vimrc (or ~/_vimrc if you're on Windows):

    if executable('node')
      au User lsp_setup call lsp#register_server({
            \ 'name': 'tact',
            \ 'cmd': {server_info->['node', '/absolute/path/to/language-server/dist/server.js', '--stdio']},
            \ 'allowlist': ['tact'],
            \ })
    endif

Helix

  1. Make sure you have Helix installed and configured

  2. Add the following configuration to your ~/.config/helix/languages.toml:

    [[language]]
    name = "tact"
    language-servers = ["tact-language-server"]
    
    [language-server.tact-language-server]
    command = "node"
    args = ["path/to/language-server/dist/server.js", "--stdio"]
  3. Replace path/to/language-server with the actual path where you cloned the repository

  4. Restart Helix for changes to take effect

Troubleshooting

See TROUBLESHOOTING.md.

Community

License

MIT