vimfony

command module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 26, 2025 License: MIT Imports: 3 Imported by: 0

README

Vimfony Logo

This is a language server that adds some useful jumps for Symfony projects.

It uses your go-to definition keymapping (gd for most vimmers)

I have made this tool because I use Sylius a lot, which works with twig hooks and the amount of twig files can get overwhelming. Also, PhpStorm has a Symfony plugin, so us NeoVim users should also have some nice things...

If you find a bug or want a feature, you can create an issue or a PR. I’ll probably take a look at it, but no promises. If you do create a PR, then please don’t try to implement a PHP parser, because all Go libraries I’ve found seem to be abandoned. For now, we’ll just simply stream files and rely on string matching to get the work done, and it works pretty reliable so far.

Features

  • gd Twig templates with @Bundle support
  • gd Twig functions
  • gd class from within yaml files
  • gd service definitions for example @service_container
  • Autocomplete service names (works in yaml files and autoconfigure php attributes)

Planned features

These features are not yet implemented but would be useful: (feel free to create a PR if you want to contribute)

  • Support for XML service configuration
  • Autocomplete Twig files
  • gd Twig components
  • Version checker & updater (vimfony update)

How to use

You can download a release for your OS and CPU or build from source:

git clone https://github.com/shinyvision/vimfony.git
cd vimfony
go build

And then move the vimfony binary to somewhere in your $PATH

Configure LSP (Neovim):

local lspconfig = require 'lspconfig'
local configs = require 'lspconfig.configs'
local util = lspconfig.util

configs.vimfony = {
  default_config = {
    cmd = { "vimfony" },
    filetypes = { "php", "twig", "yaml" }, -- You can remove file types if you don’t like it, but then it won’t work in tose files
    root_dir = function(fname)
      return util.root_pattern("composer.json", ".git")(fname)
    end,
    single_file_support = true,
    init_options = {
      roots = { "templates" },
      container_xml_path = util.root_pattern("composer.json", ".git")() .. "/var/cache/dev/App_KernelDevDebugContainer.xml", -- Where your container XML is
      vendor_dir = util.root_pattern("composer.json", ".git")() .. "/vendor", -- Where your vendor directory is
      -- Optional:
      -- php_path = "/usr/bin/php",
    },
  },
}

lspconfig.vimfony.setup({})

If you use this project and like what it does, then please give it a star on Github.

PS. I highly recommend purchasing a license for Intelephense. It’s worth your 25 bucks.

Finally

This is just a quick project because I was missing features in my workflow and I’m sharing it here with you. I am by no means an expert in language servers.

Also, I have no idea if this works for VSCode. I have never used VSCode, but I’ve heard it uses language servers in the same way as Neovim. Maybe it’ll work, maybe it won’t.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
php

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL