## Description
### Summary
This PR adds comprehensive support for Solidity development in Neovim
using LazyVim. The following updates were made to streamline Solidity
development:
### Changes
1. **Solidity File Type Detection**
- Configured LazyVim to recognize Solidity projects by detecting
`foundry.toml`, `hardhat.config.js`, and `hardhat.config.ts` files.
2. **Treesitter Support for Solidity**
- Added `solidity` to the list of languages ensured by
`nvim-treesitter`, providing syntax highlighting and better code
structure understanding.
3. **Language Server Protocol (LSP) Setup**
- Configured `nvim-lspconfig` to support `solidity_ls` as the LSP for
Solidity files.
- Set up `root_dir` detection based on project files or a `.git`
directory to enable proper LSP functioning in Solidity projects.
4. **Solidity Formatter**
- Integrated `forge_fmt` as a formatter for Solidity files using
`conform.nvim`, which utilizes `forge fmt` to format code.
### Why use `forge fmt` instead of Prettier?
- **Prettier's Solidity support requires extra plugins**: Prettier does
not have native Solidity support and depends on
`prettier-plugin-solidity`. Even with
`vim.g.lazyvim_prettier_needs_config = false`, formatting won't work
unless a `.prettierrc` file is configured, creating unnecessary
complexity.
- **`forge fmt` is the native tool for Solidity development**: `Forge`
is a widely used tool within the Solidity ecosystem, especially when
working with Foundry. It provides built-in formatting with no extra
dependencies, making it simpler and more efficient to integrate.
- **Hardhat uses `prettier-plugin-solidity`**: For users of Hardhat,
`prettier-plugin-solidity` is required for code formatting. However, the
integration with Prettier might add complexity, while `forge fmt`
simplifies the process.
- **Future customization**: We may allow users to choose between
`prettier-plugin-solidity` and `forge fmt` for formatting in the future,
depending on their preferred tools.
### Testing
- Confirmed that Solidity files are detected and syntax-highlighted by
Treesitter.
- Verified LSP functionality for Solidity, including code navigation and
error detection.
- Tested `forge_fmt` for automatic code formatting on Solidity files.
### Motivation
These changes provide a smoother and more robust Solidity development
experience in Lazyvim, including syntax highlighting, code navigation,
and automatic formatting.
## Related Issue(s)
https://github.com/LazyVim/LazyVim/issues/1901
## Checklist
- [x] I've read the
[CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md)
guidelines.
---------
Co-authored-by: Folke Lemaitre <folke.lemaitre@gmail.com>
|
||
|---|---|---|
| .github | ||
| doc | ||
| lua/lazyvim | ||
| queries/lua | ||
| scripts | ||
| tests | ||
| .editorconfig | ||
| .gitignore | ||
| .neoconf.json | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| init.lua | ||
| LICENSE | ||
| NEWS.md | ||
| README-CN.md | ||
| README-DE.md | ||
| README-ES.md | ||
| README-FR.md | ||
| README-IT.md | ||
| README-JP.md | ||
| README-KO.md | ||
| README-PL.md | ||
| README-PT.md | ||
| README.md | ||
| selene.toml | ||
| stylua.toml | ||
| vim.yml | ||
Install · Configure · Docs
LazyVim is a Neovim setup powered by 💤 lazy.nvim to make it easy to customize and extend your config. Rather than having to choose between starting from scratch or using a pre-made distro, LazyVim offers the best of both worlds - the flexibility to tweak your config as needed, along with the convenience of a pre-configured setup.
✨ Features
- 🔥 Transform your Neovim into a full-fledged IDE
- 💤 Easily customize and extend your config with lazy.nvim
- 🚀 Blazingly fast
- 🧹 Sane default settings for options, autocmds, and keymaps
- 📦 Comes with a wealth of plugins pre-configured and ready to use
⚡️ Requirements
- Neovim >= 0.11.2 (needs to be built with LuaJIT)
- Git >= 2.19.0 (for partial clones support)
- a Nerd Font (optional)
- a C compiler for
nvim-treesitter. See here
🚀 Getting Started
You can find a starter template for LazyVim here
Try it with Docker
docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim
nvim
'
Install the LazyVim Starter
-
Make a backup of your current Neovim files:
mv ~/.config/nvim ~/.config/nvim.bak mv ~/.local/share/nvim ~/.local/share/nvim.bak -
Clone the starter
git clone https://github.com/LazyVim/starter ~/.config/nvim -
Remove the
.gitfolder, so you can add it to your own repo laterrm -rf ~/.config/nvim/.git -
Start Neovim!
nvimRefer to the comments in the files on how to customize LazyVim.
There's a great video created by @elijahmanor with a walkthrough to get started.
@dusty-phillips wrote a comprehensive book called LazyVim for Ambitious Developers available for free online.
📂 File Structure
The files under config will be automatically loaded at the appropriate time, so you don't need to require those files manually. LazyVim comes with a set of default config files that will be loaded before your own. See here
You can add your custom plugin specs under lua/plugins/. All files there
will be automatically loaded by lazy.nvim
~/.config/nvim ├── lua │ ├── config │ │ ├── autocmds.lua │ │ ├── keymaps.lua │ │ ├── lazy.lua │ │ └── options.lua │ └── plugins │ ├── spec1.lua │ ├── ** │ └── spec2.lua └── init.lua
⚙️ Configuration
Refer to the docs


