bug fix and add error logs

neovim_0_5
ray-x 3 years ago
parent 777acc4b92
commit fc37a3f9a2

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2021 rayx Copyright (c) 2021 Ray-X
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

@ -2,17 +2,16 @@
- Easy code navigation through LSP and 🌲🏡Treesitter symbols; view diagnostic errors. - Easy code navigation through LSP and 🌲🏡Treesitter symbols; view diagnostic errors.
- Put language server and tree sitter's parser together. Not only for better highlight but also display symbol context - Combine LSP and treesitter parser together. Not only providing better highlight but also help you analysis symbol context
and scope. and scope.
Here is an example Here is an example
Show javascript call tree 🌲 of a variable inside a closure. Similar to incoming&outgoing calls from LSP. This feature Following screen shot shows javascript call tree 🌲 of variable `browser` insides a closure. This feature is similar to incoming&outgoing calls from LSP. It is designed for the symbol analysis.
is designed for the symbol analysis.
![js_closure_call_tree](https://user-images.githubusercontent.com/1681295/119120589-cee23700-ba6f-11eb-95c5-b9ac8d445c31.jpg) ![js_closure_call_tree](https://user-images.githubusercontent.com/1681295/119120589-cee23700-ba6f-11eb-95c5-b9ac8d445c31.jpg)
Explains: Explains:
- There are 3 references for the symbol <span style="color:red"> *browser* </span> in closure.js - First line of floating windows shows there are 3 references for the symbol <span style="color:red"> *browser* </span> in closure.js
- The first reference of browser is an assigement, an emoji of 📝 indicates the value changed in this line. In many - The first reference of browser is an assigement, an emoji of 📝 indicates the value changed in this line. In many
cases, we search for reference to find out where the value changed. cases, we search for reference to find out where the value changed.
- The second reference of `browser` is inside function `displayName` and `displayName` sit inside `makeFunc`, So you - The second reference of `browser` is inside function `displayName` and `displayName` sit inside `makeFunc`, So you

@ -3,16 +3,21 @@ local diagnostic_list = {}
local util = require "navigator.util" local util = require "navigator.util"
local log = util.log local log = util.log
local error = util.error
diagnostic_list[vim.bo.filetype] = {} diagnostic_list[vim.bo.filetype] = {}
local diag_hdlr = function(err, method, result, client_id, br, config) local diag_hdlr = function(err, method, result, client_id, br, config)
-- log(result) -- log(result)
vim.lsp.diagnostic.on_publish_diagnostics(err, method, result, client_id, br, config) vim.lsp.diagnostic.on_publish_diagnostics(err, method, result, client_id, br, config)
if err ~= nil then log(err, config) end if err ~= nil then
log(err, config)
end
local cwd = vim.fn.getcwd(0) local cwd = vim.fn.getcwd(0)
local ft = vim.bo.filetype local ft = vim.bo.filetype
if diagnostic_list[ft] == nil then diagnostic_list[vim.bo.filetype] = {} end if diagnostic_list[ft] == nil then
diagnostic_list[vim.bo.filetype] = {}
end
-- vim.lsp.diagnostic.clear(vim.fn.bufnr(), client.id, nil, nil) -- vim.lsp.diagnostic.clear(vim.fn.bufnr(), client.id, nil, nil)
local uri = result.uri local uri = result.uri
@ -27,16 +32,26 @@ local diag_hdlr = function(err, method, result, client_id, br, config)
item.col = v.range.start.character + 1 item.col = v.range.start.character + 1
item.uri = uri item.uri = uri
local head = "🐛" local head = "🐛"
if v.severity == 1 then head = "🈲" end if v.severity == 1 then
if v.severity == 2 then head = "☣️" end head = "🈲"
if v.severity > 2 then head = "👎" end end
if v.severity == 2 then
head = "☣️"
end
if v.severity > 2 then
head = "👎"
end
local bufnr = vim.uri_to_bufnr(uri) local bufnr = vim.uri_to_bufnr(uri)
vim.fn.bufload(bufnr) vim.fn.bufload(bufnr)
local pos = v.range.start local pos = v.range.start
local row = pos.line local row = pos.line
local line = (vim.api.nvim_buf_get_lines(bufnr, row, row + 1, false) or {""})[1] local line = (vim.api.nvim_buf_get_lines(bufnr, row, row + 1, false) or {""})[1]
item.text = head .. line .. " 📛 " .. v.message if line ~= nil then
table.insert(item_list, item) item.text = head .. line .. " 📛 " .. v.message
table.insert(item_list, item)
else
error("diagnostic result empty line", v, item)
end
end end
-- local old_items = vim.fn.getqflist() -- local old_items = vim.fn.getqflist()
diagnostic_list[ft][uri] = item_list diagnostic_list[ft][uri] = item_list
@ -67,7 +82,9 @@ M.show_diagnostic = function()
for _, buf in ipairs(bufs) do for _, buf in ipairs(bufs) do
local bname = vim.fn.bufname(buf) local bname = vim.fn.bufname(buf)
if #bname > 0 and not util.exclude(bname) then if #bname > 0 and not util.exclude(bname) then
if vim.api.nvim_buf_is_loaded(buf) then vim.lsp.diagnostic.get(buf, nil) end if vim.api.nvim_buf_is_loaded(buf) then
vim.lsp.diagnostic.get(buf, nil)
end
end end
end end
if diagnostic_list[vim.bo.filetype] ~= nil then if diagnostic_list[vim.bo.filetype] ~= nil then
@ -76,7 +93,9 @@ M.show_diagnostic = function()
local results = diagnostic_list[vim.bo.filetype] local results = diagnostic_list[vim.bo.filetype]
local display_items = {} local display_items = {}
for _, items in pairs(results) do for _, items in pairs(results) do
for _, it in pairs(items) do table.insert(display_items, it) end for _, it in pairs(items) do
table.insert(display_items, it)
end
end end
-- log(display_items) -- log(display_items)
if #display_items > 0 then if #display_items > 0 then

@ -4,6 +4,7 @@ local gutil = require "guihua.util"
local lsp = require "vim.lsp" local lsp = require "vim.lsp"
local api = vim.api local api = vim.api
local log = require"navigator.util".log local log = require"navigator.util".log
local lerr = require"navigator.util".error
local trace = require"navigator.util".trace local trace = require"navigator.util".trace
local symbol_kind = require"navigator.lspclient.lspkind".symbol_kind local symbol_kind = require"navigator.lspclient.lspkind".symbol_kind
local cwd = vim.fn.getcwd(0) local cwd = vim.fn.getcwd(0)
@ -136,6 +137,7 @@ end
local function ts_functions(uri) local function ts_functions(uri)
if not ts_enabled or not calltree_enabled then if not ts_enabled or not calltree_enabled then
lerr("ts not enabled")
return nil return nil
end end
local ts_func = require"navigator.treesitter".buf_func local ts_func = require"navigator.treesitter".buf_func

@ -1,3 +1,5 @@
--- Note: some of the functions/code coped from treesitter/refactor/navigation.lua and may be modified
-- to fit in navigator.lua
local gui = require "navigator.gui" local gui = require "navigator.gui"
local ok, ts_locals = pcall(require, "nvim-treesitter.locals") local ok, ts_locals = pcall(require, "nvim-treesitter.locals")
@ -7,14 +9,16 @@ if not ok then
end end
local parsers = require "nvim-treesitter.parsers" local parsers = require "nvim-treesitter.parsers"
local ts_utils = require "nvim-treesitter.ts_utils"
local utils = require "nvim-treesitter.utils" local utils = require "nvim-treesitter.utils"
local locals = require 'nvim-treesitter.locals'
local ts_utils = require 'nvim-treesitter.ts_utils'
local api = vim.api local api = vim.api
local util = require "navigator.util" local util = require "navigator.util"
local M = {} local M = {}
local cwd = vim.fn.getcwd(0) local cwd = vim.fn.getcwd(0)
local log = require"navigator.util".log local log = require"navigator.util".log
local lerr = require"navigator.util".error
local trace = require"navigator.util".trace local trace = require"navigator.util".trace
local match_kinds = { local match_kinds = {
@ -36,6 +40,43 @@ local get_icon = function(kind)
end end
end end
function M.goto_definition(bufnr)
bufnr = bufnr or api.nvim_get_current_buf()
local node_at_point = ts_utils.get_node_at_cursor()
if not node_at_point then
return
end
local definition = locals.find_definition(node_at_point, bufnr)
if definition ~= node_at_point then
ts_utils.goto_node(definition)
end
end
-- use lsp range to find def
function M.find_definition(range, bufnr)
if not range then
return
end
bufnr = bufnr or api.nvim_get_current_buf()
local cursor = {range.start.line, range.start.character} -- +1 or not?
local node_at_point = ts_utils.get_node_at_cursor()
if not node_at_point then
lerr("no node at cursor")
return
end
local definition = locals.find_definition(node_at_point, bufnr)
log(definition)
return
end
--- Get definitions of bufnr (unique and sorted by order of appearance). --- Get definitions of bufnr (unique and sorted by order of appearance).
--- This function copy from treesitter/refactor/navigation.lua --- This function copy from treesitter/refactor/navigation.lua
local function get_definitions(bufnr) local function get_definitions(bufnr)

@ -91,6 +91,7 @@ M._log = require("guihua.log").new({level = default_config.level}, true)
-- add log to you lsp.log -- add log to you lsp.log
M.log = M._log.info M.log = M._log.info
M.info = M._log.info
M.trace = M._log.trace M.trace = M._log.trace
M.error = M._log.error M.error = M._log.error

@ -1,24 +0,0 @@
" built upon popfix api(https://github.com/RishabhRD/popfix)
" for parameter references see popfix readme.
if exists('g:loaded_navigator_lsp') | finish | endif
let s:save_cpo = &cpo
set cpo&vim
if ! exists('g:navigator_lsp_location_opts')
let g:navigator_lsp_location_opts = v:null
endif
if ! exists('g:navigator_lsp_symbols_opts')
let g:navigator_lsp_symbols_opts = v:null
endif
if ! exists('g:navigator_lsp_codeaction_opts')
let g:navigator_lsp_codeaction_opts = v:null
endif
let &cpo = s:save_cpo
unlet s:save_cpo
let g:loaded_navigator_lsp = 1
Loading…
Cancel
Save