Auto install formatter used by conform
This commit is contained in:
		
							parent
							
								
									3603e9ce35
								
							
						
					
					
						commit
						cfe2cb9ac9
					
				| 
						 | 
					@ -1,20 +1,35 @@
 | 
				
			||||||
return {
 | 
					return {
 | 
				
			||||||
  'stevearc/conform.nvim',
 | 
					  'stevearc/conform.nvim',
 | 
				
			||||||
 | 
					  dependencies = {
 | 
				
			||||||
 | 
					    'williamboman/mason.nvim',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  event = { 'BufReadPre', 'BufNewFile' },
 | 
					  event = { 'BufReadPre', 'BufNewFile' },
 | 
				
			||||||
  opts = {
 | 
					  opts = {
 | 
				
			||||||
    formatters_by_ft = {
 | 
					    formatters_by_ft = {
 | 
				
			||||||
      lua = { 'stylua' },
 | 
					      lua = { 'stylua' },
 | 
				
			||||||
      python = function(bufnr)
 | 
					      python = { 'ruff_format' },
 | 
				
			||||||
        if require('conform').get_formatter_info('ruff_format', bufnr).available then
 | 
					 | 
				
			||||||
          return { 'ruff_format' }
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
          return { 'isort', 'black' }
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
      end,
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    format_on_save = {
 | 
					    format_on_save = {
 | 
				
			||||||
      timeout_ms = 500,
 | 
					      timeout_ms = 500,
 | 
				
			||||||
      lsp_fallback = true,
 | 
					      lsp_fallback = true,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  config = function(_, opts)
 | 
				
			||||||
 | 
					    local registry = require 'mason-registry'
 | 
				
			||||||
 | 
					    registry.refresh(function()
 | 
				
			||||||
 | 
					      for _, tbl in pairs(opts.formatters_by_ft) do
 | 
				
			||||||
 | 
					        for _, pkg_name in ipairs(tbl) do
 | 
				
			||||||
 | 
					          -- TODO the name formatters_by_ft needed may be different from the name mason needed
 | 
				
			||||||
 | 
					          if pkg_name == 'ruff_format' then
 | 
				
			||||||
 | 
					            pkg_name = 'ruff'
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					          local pkg = registry.get_package(pkg_name)
 | 
				
			||||||
 | 
					          if not pkg:is_installed() then
 | 
				
			||||||
 | 
					            pkg:install()
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					    require('conform').setup(opts)
 | 
				
			||||||
 | 
					  end,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue