joelspadin / tree-sitter-devicetree

Tree-sitter grammar for Devicetree files
MIT License
28 stars 6 forks source link

Add .overlay files #10

Closed szczys closed 12 months ago

szczys commented 1 year ago

Thank you for this grammar for highlighting Devicetree file! It makes my Zephyr dev experience much better.

After installing, highlighting works for .dts files. But my nvim doesn't recognize .overlay files as belonging to devicetree. I looked through the code here, but I don't see a place where file extensions are referenced so maybe that's not possible from the grammar itself?

My solution was to add the filetype when my treesitter.lua file is run during initialization:

require'nvim-treesitter.configs'.setup {
  -- A list of parser names, or "all" (the five listed parsers should always be installed)
  ensure_installed = { "c", "lua", "vim", "vimdoc", "query", "devicetree", "kconfig", "markdown_inline" },

  -- Install parsers synchronously (only applied to `ensure_installed`)
  sync_install = false,

  -- Automatically install missing parsers when entering buffer
  -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
  auto_install = true,

  -- List of parsers to ignore installing (or "all")
  ignore_install = { "javascript" },

  ---- If you need to change the installation directory of the parsers (see -> Advanced Setup)
  -- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")!

  highlight = {
    enable = true,

    -- NOTE: these are the names of the parsers and not the filetype. (for example if you want to
    -- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is
    -- the name of the parser)
    -- list of language that will be disabled
    disable = { "c", "rust" },
    -- Or use a function for more flexibility, e.g. to disable slow treesitter highlight for large files
    disable = function(lang, buf)
        local max_filesize = 100 * 1024 -- 100 KB
        local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
        if ok and stats and stats.size > max_filesize then
            return true
        end
    end,

    -- Setting this to true will run `:h syntax` and tree-sitter at the same time.
    -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
    -- Using this option may slow down your editor, and you may see some duplicate highlights.
    -- Instead of true it can also be a list of languages
    additional_vim_regex_highlighting = false,

    -- This code adds *.overlay files to the devicetree filetype
    vim.filetype.add({
      extension = {
        overlay = 'devicetree',
      },
    })
  },
}

The non-automatic way is to use :set filetype=devicetree when you have your .overlay file open.

Is there a way to apply this automatically at the grammar level? If not, I'd be happy to open a PR that details this approach in the README file. Thanks!

joelspadin commented 12 months ago

Tree-sitter grammars don't typically include info for integrating themselves into other tools. That would be the responsibility of the tool itself.

Looking at this, I think nvim-treesitter already has this repo integrated: https://github.com/nvim-treesitter/nvim-treesitter/blob/c0da2013d1cef768c00f3f0b7f365fe19a10bca3/lua/nvim-treesitter/parsers.lua#L358

If nvim just doesn't recognize .overlay as a belonging to the dts filetype, then that sounds like something that needs to be fixed in nvim.

szczys commented 12 months ago

Okay, thanks! I'll take a look and see if I can make a PR for this in nvim.