init.lua 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. -- if not package.loaded['nvim-treesitter'] then return end
  2. --
  3. -- Custom parsers
  4. local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
  5. -- parser_config.make = {
  6. -- install_info = {
  7. -- url = "https://github.com/alemuller/tree-sitter-make", -- local path or git repo
  8. -- files = {"src/parser.c"},
  9. -- requires_generate_from_grammar = true
  10. -- }
  11. -- }
  12. -- parser_config.just = {
  13. -- install_info = {
  14. -- url = "~/dev/tree-sitter-just", -- local path or git repo
  15. -- files = {"src/parser.c"}
  16. -- }
  17. -- -- filetype = "just", -- if filetype does not agrees with parser name
  18. -- -- used_by = {"bar", "baz"} -- additional filetypes that use this parser
  19. -- }
  20. -- Custom text objects
  21. local textobj_prefixes = O.treesitter.textobj_prefixes
  22. local textobj_suffixes = O.treesitter.textobj_suffixes
  23. local textobj_sel_keymaps = {}
  24. local textobj_swap_keymaps = {}
  25. local textobj_move_keymaps = {
  26. enable = O.plugin.ts_textobjects,
  27. set_jumps = true, -- whether to set jumps in the jumplist
  28. goto_next_start = {},
  29. goto_next_end = {},
  30. goto_previous_start = {},
  31. goto_previous_end = {},
  32. }
  33. for obj, suffix in pairs(textobj_suffixes) do
  34. if textobj_prefixes["goto_next"] ~= nil then
  35. textobj_move_keymaps["goto_next_start"][textobj_prefixes["goto_next"] .. suffix[1]] = "@" .. obj .. ".outer"
  36. textobj_move_keymaps["goto_next_end"][textobj_prefixes["goto_next"] .. suffix[2]] = "@" .. obj .. ".outer"
  37. end
  38. if textobj_prefixes["goto_prev"] ~= nil then
  39. textobj_move_keymaps["goto_previous_start"][textobj_prefixes["goto_previous"] .. suffix[2]] = "@" .. obj .. ".outer"
  40. textobj_move_keymaps["goto_previous_end"][textobj_prefixes["goto_previous"] .. suffix[1]] = "@" .. obj .. ".outer"
  41. end
  42. if textobj_prefixes["inner"] ~= nil then
  43. textobj_sel_keymaps[textobj_prefixes["inner"] .. suffix[1]] = "@" .. obj .. ".inner"
  44. end
  45. if textobj_prefixes["outer"] ~= nil then
  46. textobj_sel_keymaps[textobj_prefixes["outer"] .. suffix[1]] = "@" .. obj .. ".outer"
  47. end
  48. if textobj_prefixes["swap"] ~= nil then
  49. textobj_swap_keymaps[textobj_prefixes["swap"] .. suffix[1]] = "@" .. obj .. ".outer"
  50. end
  51. end
  52. vim.g.ts_hint_textobject_keys = O.treesitter.hint_labels -- Requires https://github.com/mfussenegger/nvim-ts-hint-textobject/pull/2
  53. -- Add which key menu entries
  54. local status, wk = pcall(require, "which-key")
  55. if status then
  56. local normal = {
  57. mode = "n", -- Normal mode
  58. }
  59. local operators = {
  60. mode = "o", -- Operator mode
  61. }
  62. wk.register(textobj_sel_keymaps, operators)
  63. wk.register({
  64. ["m"] = "Hint Objects",
  65. ["."] = "Textsubject",
  66. [";"] = "Textsubject-big",
  67. }, operators)
  68. wk.register(textobj_swap_keymaps, normal)
  69. wk.register({
  70. [textobj_prefixes["swap"]] = "Swap",
  71. -- [textobj_prefixes["goto_next"]] = "Jump [",
  72. -- [textobj_prefixes["goto_previous"]] = "Jump ]"
  73. }, normal)
  74. wk.register(textobj_move_keymaps["goto_next_start"], normal)
  75. wk.register(textobj_move_keymaps["goto_next_end"], normal)
  76. wk.register(textobj_move_keymaps["goto_previous_start"], normal)
  77. wk.register(textobj_move_keymaps["goto_previous_end"], normal)
  78. end
  79. require("nvim-treesitter.configs").setup {
  80. ensure_installed = O.treesitter.ensure_installed, -- one of "all", "maintained" (parsers with maintainers), or a list of languages
  81. ignore_install = O.treesitter.ignore_install,
  82. matchup = {
  83. enable = true, -- mandatory, false will disable the whole extension
  84. -- disable = { "c", "ruby" }, -- optional, list of language that will be disabled
  85. },
  86. highlight = {
  87. enable = O.treesitter.enabled, -- false will disable the whole extension
  88. additional_vim_regex_highlighting = true,
  89. disable = { "latex" },
  90. },
  91. context_commentstring = {
  92. enable = O.plugin.ts_context_commentstring.active,
  93. config = { css = "// %s" },
  94. },
  95. -- indent = {enable = true, disable = {"python", "html", "javascript"}},
  96. -- TODO seems to be broken
  97. indent = { enable = { "javascriptreact" } },
  98. -- autotag = { enable = O.plugin.ts_autotag.active },
  99. textobjects = {
  100. swap = {
  101. enable = O.plugin.ts_textobjects,
  102. swap_next = textobj_swap_keymaps,
  103. },
  104. move = textobj_move_keymaps,
  105. select = {
  106. enable = O.plugin.ts_textobjects,
  107. keymaps = textobj_sel_keymaps,
  108. },
  109. },
  110. textsubjects = {
  111. enable = O.plugin.ts_textsubjects,
  112. keymaps = { ["."] = "textsubjects-smart", [";"] = "textsubjects-big" },
  113. },
  114. playground = {
  115. enable = O.plugin.ts_playground.active,
  116. disable = {},
  117. updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code
  118. persist_queries = false, -- Whether the query persists across vim sessions
  119. keybindings = {
  120. toggle_query_editor = "o",
  121. toggle_hl_groups = "i",
  122. toggle_injected_languages = "t",
  123. toggle_anonymous_nodes = "a",
  124. toggle_language_display = "I",
  125. focus_language = "f",
  126. unfocus_language = "F",
  127. update = "R",
  128. goto_node = "<cr>",
  129. show_help = "?",
  130. },
  131. },
  132. -- rainbow = {
  133. -- enable = O.plugin.ts_rainbow.active,
  134. -- extended_mode = true, -- Highlight also non-parentheses delimiters, boolean or table: lang -> boolean
  135. -- max_file_lines = 1000, -- Do not enable for files with more than 1000 lines, int
  136. -- },
  137. }