Open XSven opened 10 months ago
This may be a limitation of ctags. Can you confirm the output of running ctags on the file to see if it has the "access"
flag?
ctags --extras=+F -f - --format=2 --excmd=pattern --fields=nksSafet --sort=no --append=no -V --language-force=go --go-kinds=picsmtfv <file>
This is the output:
ctags --extras=+F -f - --format=2 --excmd=pattern --fields=nksSafet --sort=no --append=no -V --language-force=go --go-kinds=picsmtfv pkg/knib-lib-gologger.go
Option: --language-force=go
Option: --go-kinds=picsmtfv
Initialize parser: Go
enable field "name": yes
enable field "input": yes
enable field "pattern": yes
Reading command line arguments
OPENING pkg/knib-lib-gologger.go as Go language file [new]
kniblog pkg/knib-lib-gologger.go /^package kniblog$/;" p line:1
Logger pkg/knib-lib-gologger.go /^var Logger *zerolog.Logger$/;" v line:10 package:kniblog typeref:typename:*zerolog.Logger
writeClosersZerolog pkg/knib-lib-gologger.go /^var writeClosersZerolog []io.WriteCloser$/;" v line:11 package:kniblog typeref:typename:[]io.WriteCloser
LogSetupZerolog pkg/knib-lib-gologger.go /^func LogSetupZerolog(logLevel int8, writers []io.Writer, writeClosers []io.WriteCloser) error {$/;" f line:13 package:kniblog typeref:typename:error signature:(logLevel int8, writers []io.Writer, writeClosers []io.WriteCloser) end:23
LogStopZerolog pkg/knib-lib-gologger.go /^func LogStopZerolog() []error {$/;" f line:25 package:kniblog typeref:typename:[]error signature:() end:35
Ok this looks to be an issue with ctags itself then. Tagbar keys off the field "access:public"
to help determine public/private status. Without that, it can't make the determination and avoids making an assumption that it is private. Here is an example from a C++ file that correctly labels the access mode:
fun test.cpp /^ void fun();$/;" p line:6 class:A typeref:typename:void file: access:public signature:() end:6
You can open an issue on the universal-ctags github page. Once ctags supports it, we can confirm the correct behavior within tagbar. If you do open an issue on universal-ctags, feel free to link this issue to that one so we can help track it.
Ok I will do but I do not understand why tagbar is able to mark ("-" minus sign) the variable
-writeClosersZerolog : []io.WriteCloser
as private and afterwards tagbar is not able to hide it using the "v" key?!
From what you have written it is not clear to me if we are talking about a universal-ctags bug or a missing feature for the Go programming language (maybe it is only a matter of taste).
That is actually a good question. When I try to repro I don't see the access modifier in front. I just see writeClosersZerolog : []io.WriteCloser
in my tagbar window without the -
symbol.
I can confirm that when I open a C++ file that has the access modifiers in the ctags output, I see the -
symbol in the tagbar window, and when I hit the v
key it does hide these private variables. I wouldn't say it is an issue with the Go language itself, but just how ctags is presenting the data to tagbar.
Can you provide the file you are using as well as your vim version information?
This knib-lib-gologger.go.txt is the file. Note that I had to add the additional extension .txt because github doesn't allow to attach .go files. My vim belongs to the package vim-enhanced-8.1.2424-1.ppc. The detailed version information is
vim --version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jun 2 2020 02:10:57)
Included patches: 1-2424
Compiled by <ayappap2@in.ibm.com>
Huge version without GUI. Features included (+) or not (-):
+acl -farsi -mouse_sysmouse -tag_old_static
+arabic +file_in_path +mouse_urxvt -tag_any_white
+autocmd +find_in_path +mouse_xterm -tcl
+autochdir +float +multi_byte +termguicolors
-autoservername +folding +multi_lang +terminal
-balloon_eval -footer -mzscheme +terminfo
+balloon_eval_term +fork() +netbeans_intg +termresponse
-browse +gettext +num64 +textobjects
++builtin_terms -hangul_input +packages +textprop
+byte_offset +iconv +path_extra +timers
+channel +insert_expand -perl +title
+cindent +job +persistent_undo -toolbar
-clientserver +jumplist +popupwin +user_commands
-clipboard +keymap +postscript +vartabs
+cmdline_compl +lambda +printer +vertsplit
+cmdline_hist +langmap +profile +virtualedit
+cmdline_info +libcall +python/dyn +visual
+comments +linebreak -python3 +visualextra
+conceal +lispindent +quickfix +viminfo
+cryptv +listcmds +reltime +vreplace
+cscope +localmap +rightleft +wildignore
+cursorbind -lua -ruby +wildmenu
+cursorshape +menu +scrollbind +windows
+dialog_con +mksession +signs +writebackup
+diff +modify_fname +smartindent -X11
+digraphs +mouse -sound -xfontset
-dnd -mouseshape +spell -xim
-ebcdic +mouse_dec +startuptime -xpm
+emacs_tags -mouse_gpm +statusline -xsmp
+eval -mouse_jsbterm -sun_workshop -xterm_clipboard
+ex_extra +mouse_netterm +syntax -xterm_save
+extra_search +mouse_sgr +tag_binary
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
defaults file: "$VIMRUNTIME/defaults.vim"
fall-back for $VIM: "/opt/freeware/share/vim"
Compilation: /opt/freeware/bin/gcc -O2 -maix64 -D_LINUX_SOURCE_COMPAT -D_GNU_SOURCE -I/opt/freeware/include -I/usr/include -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: /opt/freeware/bin/gcc -O2 -maix64 -D_LINUX_SOURCE_COMPAT -D_GNU_SOURCE -I/opt/freeware/include -I/usr/include -L/opt/freeware/lib64 -L/opt/freeware/lib -L/usr/lib -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/vac/lib:/usr/lib:/lib -L/usr/local/lib -o vim -lm -lncurses -liconv -lintl
Hmm. When I open this file, I don't see any access symbol in front of any of the variables.
Do you have a custom config for ctags / vim / tagbar that is adding this? Or maybe another extension that adds this somehow? I'm just running out of ideas myself. I do know that with tagbar, if it sees the "access"
flag from ctags output, then it will use that to give the symbol in the display, but also will add the expected behavior for hiding / unhiding via the v
keymap.
These are my tagbar related configurations
nn <silent> <unique> <Leader>tb :TagbarToggle<CR>
let g:tagbar_position = 'topleft vertical'
let g:tagbar_autofocus = 1
let g:tagbar_zoomwidth = 0
let g:tagbar_foldlevel = 0
let g:tagbar_sort = 1
let g:tagbar_compact = 1
I have the vim-go plugin installed but it is not loaded. This is my runtimepath
/home/micsw/.vim
/home/micsw/.vim/plugged/molokai
/home/micsw/.vim/plugged/vcscommand.vim
/home/micsw/.vim/plugged/vim-fugitive
/home/micsw/.vim/plugged/vim-numbertoggle
/home/micsw/.vim/plugged/tagbar
/home/micsw/.vim/plugged/vim-airline
/home/micsw/.vim/plugged/TaskList.vim
/home/micsw/.vim/plugged/vim-unimpaired
/home/micsw/.vim/plugged/vim-eunuch
/home/micsw/.vim/plugged/syntastic
/home/micsw/.vim/plugged/vim-yaml-folds
/opt/freeware/share/vim/vimfiles
/opt/freeware/share/vim/vim81
/opt/freeware/share/vim/vimfiles/after
/home/micsw/.vim/plugged/vim-yaml-folds/after
/home/micsw/.vim/after
I took a look through the plugins and nothing jumps out that I can see that would impact how tagbar sees the tags. Sorry I can't be of more help on this. If you figure it out, I'd be curious how you are seeing the access modifier in your setup. Otherwise we can wait to see if the ctags enhancement gets implemented, and check to ensure the correct behavior here in tagbar.
I have not yet raised a universal-ctags issue, but I have just detected that the "v" toggling seems to work for "struct"s instead of "funtion"s. I have opened the tagbar for test suite file _knib-lib-gologgertest.go. asserter
is a private field of the LogSetupZerologSuite
struct and I can toggle its visibility with "v"
▾+LogSetupZerologSuite : struct
[fields]
-asserter : *require.Assertions
This is the corresponding ctags
output
ctags --extras=+F -f - --format=2 --excmd=pattern --fields=nksSafet --sort=no --append=no -V --language-force=go --go-kinds=picsmtfv pkg/knib-lib-gologger_test.go
Option: --language-force=go
Option: --go-kinds=picsmtfv
Initialize parser: Go
enable field "name": yes
enable field "input": yes
enable field "pattern": yes
Reading command line arguments
OPENING pkg/knib-lib-gologger_test.go as Go language file [new]
symtbl[:=] *root*<-byteSliceWriter/20084e98 (line: 13)
symtbl[<>] byteSliceWriter->20084e98
symtbl[>|] byteSliceWriter->20084e98
symtbl[< ] byteSliceWriter->20084e98
symtbl[:=] *root*<-byteSliceWriterCloser/20085808 (line: 24)
symtbl[<>] byteSliceWriterCloser->20085808
symtbl[>|] byteSliceWriterCloser->20085808
symtbl[< ] byteSliceWriterCloser->20085808
symtbl[<>] byteSliceWriterCloser->20085808
symtbl[>|] byteSliceWriterCloser->20085808
symtbl[< ] byteSliceWriterCloser->20085808
symtbl[:=] *root*<-LogSetupZerologSuite/20086528 (line: 41)
symtbl[<>] LogSetupZerologSuite->20086528
symtbl[>|] LogSetupZerologSuite->20086528
symtbl[< ] LogSetupZerologSuite->20086528
symtbl[<>] LogSetupZerologSuite->20086528
symtbl[>|] LogSetupZerologSuite->20086528
symtbl[< ] LogSetupZerologSuite->20086528
symtbl[<>] LogSetupZerologSuite->20086528
symtbl[>|] LogSetupZerologSuite->20086528
symtbl[< ] LogSetupZerologSuite->20086528
symtbl[<>] LogSetupZerologSuite->20086528
symtbl[>|] LogSetupZerologSuite->20086528
symtbl[< ] LogSetupZerologSuite->20086528
symtbl[<>] LogSetupZerologSuite->20086528
symtbl[>|] LogSetupZerologSuite->20086528
symtbl[< ] LogSetupZerologSuite->20086528
kniblog_test pkg/knib-lib-gologger_test.go /^package kniblog_test$/;" p line:1
byteSliceWriter pkg/knib-lib-gologger_test.go /^type byteSliceWriter struct {$/;" s line:13 package:kniblog_test end:16
logContent pkg/knib-lib-gologger_test.go /^ logContent []string$/;" m line:15 struct:kniblog_test.byteSliceWriter typeref:typename:[]string
Write pkg/knib-lib-gologger_test.go /^func (writer *byteSliceWriter) Write(p []byte) (n int, err error) {$/;" f line:18 struct:kniblog_test.byteSliceWriter typeref:typename:(n int, err error) signature:(p []byte) end:22
byteSliceWriterCloser pkg/knib-lib-gologger_test.go /^type byteSliceWriterCloser struct {$/;" s line:24 package:kniblog_test end:28
logContent pkg/knib-lib-gologger_test.go /^ logContent []string$/;" m line:26 struct:kniblog_test.byteSliceWriterCloser typeref:typename:[]string
isClosed pkg/knib-lib-gologger_test.go /^ isClosed bool$/;" m line:27 struct:kniblog_test.byteSliceWriterCloser typeref:typename:bool
Write pkg/knib-lib-gologger_test.go /^func (writer *byteSliceWriterCloser) Write(p []byte) (n int, err error) {$/;" f line:30 struct:kniblog_test.byteSliceWriterCloser typeref:typename:(n int, err error) signature:(p []byte) end:34
Close pkg/knib-lib-gologger_test.go /^func (writer *byteSliceWriterCloser) Close() error {$/;" f line:36 struct:kniblog_test.byteSliceWriterCloser typeref:typename:error signature:() end:39
LogSetupZerologSuite pkg/knib-lib-gologger_test.go /^type LogSetupZerologSuite struct {$/;" s line:41 package:kniblog_test end:48
asserter pkg/knib-lib-gologger_test.go /^ asserter *require.Assertions$/;" m line:43 struct:kniblog_test.LogSetupZerologSuite typeref:typename:*require.Assertions
writers pkg/knib-lib-gologger_test.go /^ writers []io.Writer$/;" m line:44 struct:kniblog_test.LogSetupZerologSuite typeref:typename:[]io.Writer
byteWriters pkg/knib-lib-gologger_test.go /^ byteWriters []*byteSliceWriter$/;" m line:45 struct:kniblog_test.LogSetupZerologSuite typeref:typename:[]*byteSliceWriter
writeClosers pkg/knib-lib-gologger_test.go /^ writeClosers []io.WriteCloser$/;" m line:46 struct:kniblog_test.LogSetupZerologSuite typeref:typename:[]io.WriteCloser
byteWriteClosers pkg/knib-lib-gologger_test.go /^ byteWriteClosers []*byteSliceWriterCloser$/;" m line:47 struct:kniblog_test.LogSetupZerologSuite typeref:typename:[]*byteSliceWriterCloser
SetupTest pkg/knib-lib-gologger_test.go /^func (suite *LogSetupZerologSuite) SetupTest() {$/;" f line:50 struct:kniblog_test.LogSetupZerologSuite signature:() end:63
TestLogSetupZerologSuite pkg/knib-lib-gologger_test.go /^func TestLogSetupZerologSuite(t *testing.T) {$/;" f line:65 package:kniblog_test signature:(t *testing.T) end:67
TestSetupAcceptsWritersAndWriteClosers pkg/knib-lib-gologger_test.go /^func (suite *LogSetupZerologSuite) TestSetupAcceptsWritersAndWriteClosers() {$/;" f line:69 struct:kniblog_test.LogSetupZerologSuite signature:() end:74
logInAllLoglevels pkg/knib-lib-gologger_test.go /^func logInAllLoglevels() {$/;" f line:76 package:kniblog_test signature:() end:82
TestAllWritersAreRegistered pkg/knib-lib-gologger_test.go /^func (suite *LogSetupZerologSuite) TestAllWritersAreRegistered() {$/;" f line:84 struct:kniblog_test.LogSetupZerologSuite signature:() end:97
TestLogLevelIsPassedToLogger pkg/knib-lib-gologger_test.go /^func (suite *LogSetupZerologSuite) TestLogLevelIsPassedToLogger() {$/;" f line:99 struct:kniblog_test.LogSetupZerologSuite signature:() end:111
TestWriteClosersCloseOnLogStop pkg/knib-lib-gologger_test.go /^func (suite *LogSetupZerologSuite) TestWriteClosersCloseOnLogStop() {$/;" f line:113 struct:kniblog_test.LogSetupZerologSuite signature:() end:122
I have a .go file that has a private variable
In the tagbar "variables" section I see an entry that is marked as private
If I press the "v" key nothing happens?! This
is the map of the "v" key. Please let me know if I understand something wrong or if I should provide further information.