conform.nvim icon indicating copy to clipboard operation
conform.nvim copied to clipboard

bug: Latex in Mardown doesn't format

Open nenikitov opened this issue 2 years ago • 2 comments

Neovim version (nvim -v)

NVIM v0.10.0-dev-2359+g9f8c96240d

Operating system/version

Arch Linux 6.6.8

Add the debug logs

  • [X] I have set log_level = vim.log.levels.DEBUG and pasted the log contents below.

Log file

15:31:49[DEBUG] Running formatters on /home/nenikitov/test.md: { "injected" } 15:31:49[INFO] Run injected on /home/nenikitov/test.md 15:31:49[DEBUG] Injected format lua:2:3: { "stylua" } 15:31:49[INFO] Run stylua on /home/nenikitov/test.md.1.lua 15:31:49[DEBUG] Run command: { "stylua", "--search-parent-directories", "--stdin-filepath", "/home/nenikitov/test.md.1.lua", "-" } 15:31:49[DEBUG] stylua exited with code 0

Describe the bug

Latex injected into .md doesn't format.

It formats correctly inside .tex files.

What is the severity of this bug?

tolerable (can work around it)

Steps To Reproduce

  1. nvim -u repo.lua /path/to/example-file.md
  2. :w
  3. Observe how lua code is formatted, but not latex (inside ``` and $$)

Expected Behavior

Latex should be formatted using latexindent

Minimal example file

local a=10
\begin{bmatrix}
10
\end{bmatrix}
\begin{bmatrix}
10
\end{bmatrix}

$$ \begin{bmatrix} 10 \end{bmatrix} $$

Minimal init.lua

-- DO NOT change the paths and don't remove the colorscheme
local root = vim.fn.fnamemodify("./.repro", ":p")

-- set stdpaths to use .repro
for _, name in ipairs({ "config", "data", "state", "cache" }) do
  vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name
end

-- bootstrap lazy
local lazypath = root .. "/plugins/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "--single-branch",
    "https://github.com/folke/lazy.nvim.git",
    lazypath,
  })
end
vim.opt.runtimepath:prepend(lazypath)

-- install plugins
local plugins = {
  "folke/tokyonight.nvim",
  {
    "stevearc/conform.nvim",
    config = function()
      require("conform").setup({
        log_level = vim.log.levels.DEBUG,
        -- add your config here
        formatters_by_ft = {
          markdown = {"injected"},
          tex = {"latexindent"},
          lua = {"stylua"},
        },
        format_on_save = {
          timeout_ms = 500,
          lsp_fallback = false,
        }
      })
    end,
  },
  -- add any other plugins here
  {
    "WhoIsSethDaniel/mason-tool-installer.nvim",
    dependencies = {
      {
        "williamboman/mason.nvim",
        config = true
      },
    },
    config = function()
      require("mason-tool-installer").setup {
        ensure_installed = {
          "latexindent",
          "stylua",
        }
      }
    end
  },
  {
    "nvim-treesitter/nvim-treesitter",
    build = ":TSUpdate",
    config = function()
      require("nvim-treesitter.configs").setup({
        ensure_installed = {
          "markdown",
          "markdown_inline",
          "latex",
          "lua",
        }
      })
    end
  }
}
require("lazy").setup(plugins, {
  root = root .. "/plugins",
})

vim.cmd.colorscheme("tokyonight")
-- add anything else here

Additional context

No response

nenikitov avatar Feb 13 '24 20:02 nenikitov

Check out the options in this doc: https://github.com/stevearc/conform.nvim/blob/master/doc/formatter_options.md#injected

Open your markdown file and run :InspectTree, then press I to toggle the language of the nodes. This will help you find out the name of the language that is being used for the injection. If it says markdown, then something is going wrong with your injection (are the parsers installed?) Once you get the name (e.g. plaintex), add another entry to that lang_to_ext map. For example:

require("conform").setup({
  formatters = {
    injected = {
      options = {
        lang_to_ext = {
          plaintex = "tex"
        }
      }
    }
  }
})

If this seems like a setting that would make sense for everyone, feel free to open a PR to add it to the default list of lang_to_ext.

stevearc avatar Mar 18 '24 05:03 stevearc

Hmm, I actually see the same behaviour, but using llf instead of latexindent. From :InspectTree it does say latex, and placing for example a python block just below will format that correctly.

engeir avatar Sep 29 '24 10:09 engeir