Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dmmulroy/tsc.nvim
A Neovim plugin for seamless, asynchronous project-wide TypeScript type-checking using the TypeScript compiler (tsc)
https://github.com/dmmulroy/tsc.nvim
lua neovim nvim nvim-plugin typescript vim
Last synced: 2 months ago
JSON representation
A Neovim plugin for seamless, asynchronous project-wide TypeScript type-checking using the TypeScript compiler (tsc)
- Host: GitHub
- URL: https://github.com/dmmulroy/tsc.nvim
- Owner: dmmulroy
- License: mit
- Created: 2023-04-22T22:35:33.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-04-09T11:37:14.000Z (3 months ago)
- Last Synced: 2024-04-09T15:23:14.032Z (3 months ago)
- Topics: lua, neovim, nvim, nvim-plugin, typescript, vim
- Language: Lua
- Homepage:
- Size: 46.9 KB
- Stars: 301
- Watchers: 2
- Forks: 12
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Lists
- awesome-neovim - dmmulroy/tsc.nvim - Asynchronous project-wide TypeScript type-checking using the TypeScript compiler (TSC) with results loaded into a quickfix list. (Programming Languages Support / (requires Neovim 0.5))
- awesome-stars - tsc.nvim - wide TypeScript type-checking using the TypeScript compiler (tsc) | dmmulroy | 345 | (Lua)
- awesome-neovim - dmmulroy/tsc.nvim - Asynchronous project-wide TypeScript type-checking using the TypeScript compiler (TSC) with results loaded into a quickfix list. (Programming Languages Support / (requires Neovim 0.5))
- awesome-neovim - dmmulroy/tsc.nvim - Asynchronous project-wide TypeScript type-checking using the TypeScript compiler (TSC) with results loaded into a quickfix list. (Programming Languages Support / (requires Neovim 0.5))
README
# tsc.nvim
This Neovim plugin provides an asynchronous interface to run project-wide TypeScript type-checking using the TypeScript compiler (`tsc`). It displays the type-checking results in a quickfix list and provides visual notifications about the progress and completion of type-checking.
## Features
- Project-wide type checking
- Asynchronous execution of the TypeScript compiler to prevent lock ups and input lag
- Progress notifications with spinner animation
- Quickfix list for navigating errors
- Automatic opening of the quickfix list if there are errors
- User-friendly command `:TSC`## Demo Videos
### Type-checking with Errors
https://user-images.githubusercontent.com/2755722/233818168-de95bc9a-c406-4c71-9ef9-021f80db1da9.mov
### Type-checking without Errors
https://user-images.githubusercontent.com/2755722/233818163-bd2c2dda-88fc-41ea-a4bc-40972ad3ce9e.mov
### Usage without [nvim-notify](https://github.com/rcarriga/nvim-notify)
https://user-images.githubusercontent.com/2755722/233843746-ee116863-bef5-4e26-ba0a-afb906a2f111.mov
## Installation
To install the plugin, use your preferred Neovim plugin manager.
### Packer
To install the plugin using packer.nvim, add the following to your plugin configuration:
```lua
use('dmmulroy/tsc.nvim')```
### Vim-Plug
To install the plugin using vim-plug, add the following to your plugin configuration:
```vim
Plug 'dmmulroy/tsc.nvim'
```Then run `:PlugInstall` to install the plugin.
### Notify
For an enhanced UI/UX experience, it is recommended to install the [nvim_notify](https://github.com/rcarriga/nvim-notify) plugin as well. This plugin is optional, and the plugin will work without it.
## Setup
To set up the plugin, add the following line to your `init.vim` or `init.lua` file:
```lua
require('tsc').setup()
```## Usage
To run TypeScript type-checking, execute the `:TSC` command in Neovim. The plugin will display a progress notification while the type-checking is in progress. When the type-checking is complete, it will show a notification with the results and open a quickfix list if there are any errors.
If `watch` mode is enabled, tsc.nvim will automatically run in the background every time you save in a typescript or tsx file and report the results back to you. In addition, if `auto_start_watch_mode` is enabled, the `:TSC` command will be executed on your behalf when you enter a typescript or tsx files.
To stop any running `:TSC` command, use the `:TSCStop` command in Neovim.
## Configuration
By default, the plugin uses the default `tsc` command with the `--noEmit` flag to avoid generating output files during type-checking. It also emulates the default tsc behavior of performing a backward search from the current directory for a `tsconfig` file. The flags option can accept both a string and a table. Here's the default configuration:
```lua
{
auto_open_qflist = true,
auto_close_qflist = false,
auto_focus_qflist = false,
auto_start_watch_mode = false,
use_trouble_qflist = false,
run_as_monorepo = false,
bin_path = utils.find_tsc_bin(),
enable_progress_notifications = true,
flags = {
noEmit = true,
project = function()
return utils.find_nearest_tsconfig()
end,
watch = false,
},
hide_progress_notifications_from_history = true,
spinner = { "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" },
pretty_errors = true,
}
```With this configuration, you can use keys for flag names and their corresponding values to enable/disable the flag (in the case of `noEmit = true`), provide a function (as in the case of the `project`) or enable watch mode. This makes the configuration more explicit and easier to read. Additionally, the flags option is backwards compatible and can accept a string value if you prefer a simpler configuration:
```lua
flags = "--noEmit",
```## Manual Opening and Closing the Quickfix List
There are two user commands you can use to open and close the quickfix list:
`TSCOpen` - open the quickfix list
`TSCClose` - close the quickfix listThese commands will respect your configuration options:
- `auto_open_qflist`
- `auto_close_qflist`
- `use_trouble_qflist`### Example key maps:
```lua
vim.keymap.set('n', 'to', ':TSCOpen')
vim.keymap.set('n', 'tc', ':TSCClose')
```## FAQs
### I'm using `nvim-notify` and being spammed by progress notifications, what's going on?
It's likely that the overwritten default `vim.notify` function isn't returning `nvim-notify`'s notification record, which is used to replace the existing notification. Make sure that you're nvim-notify configuration looks something like this:
```lua
local notify = require('notify')vim.notify = function(message, level, opts)
return notify(message, level, opts) -- <-- Important to return the value from `nvim-notify`
end```
### Why doesn't tsc.nvim typecheck my entire monorepo?
By default, tsc.nvim will check only the nearest `tsconfig` file. If you would like it to use all `tsconfig` files in the current working directory, set `run_as_monorepo = true`. All other options will work as usual such as `auto_start_watch_mode`, `flags.watch`, etc.
```lua
require('tsc').setup({
run_as_monorepo = true,
})
```With this configuration, tsc.nvim will typecheck all projects in the monorepo, taking into account project references and incremental builds.
### Can I use `Trouble` for the quickfix list?
Yes, as long as you have the plugin installed you can set `use_trouble_qflist = true` in the configuration.
```lua
require('tsc').setup({
use_trouble_qflist = true,
})
```This will use Trouble for the quickfix list. This will work with all other options such as `auto_open_qflist`, `auto_close_qflist`, `auto_focus_qflist`.
## Contributing
Feel free to open issues or submit pull requests if you encounter any bugs or have suggestions for improvements. Your contributions are welcome!
## License
This plugin is released under the MIT License. See the [LICENSE](LICENSE) file for details.