Edit field tags for golang struct fields, based on gomodifytags.
This package is inspired by GoAddTags
of vim-go and go-add-tags.
gomodifytags
makes it easy to update, add or delete the tags in a struct field.
It can be installed with
go install github.com/fatih/gomodifytags@latest
Available on all major package.el
community maintained repos -
MELPA Stable and MELPA repos.
MELPA Stable is recommended as it has the latest stable version. MELPA has a development snapshot for users who don’t mind breakage but don’t want to run from a git checkout.
You can install go-tag
using the following command:
M-x package-install [RET] go-tag [RET]
or if you’d rather keep it in your dotfiles:
(unless (package-installed-p 'go-tag)
(package-refresh-contents)
(package-install 'go-tag))
If the installation doesn’t work try refreshing the package list:
M-x package-refresh-contents
GoAddTags
AND GoRemoveTags
of vim-go , go-tag
you will get started quickly.
go-tag-add
:[range]go-tag-add [key],[option] [key1],[option] …
Adds field tags for the fields of a struct. If called inside a struct it automatically add field tags with the
json
key and the value automatically generated based on the field name. An error message is given if it’s called outside a struct definition or if the file is not correctly formatted.If [range] is given, only the selected fields will be changed.
The default
json
can be changed by providing one or more [key] arguments. An example of addingxml
anddb
would be::go-tag-add xml db
If [option] is passed it’ll either add a new tag with an option or will modify existing tags. An example of adding
omitempty
to alljson
fields would be::go-tag-add json,omitempty
You can define a constant value instead of the default field based value. For example the following command will add
`valid:"1"`
to all fields.:go-tag-add valid=1
go-tag-remove
:[range]go-tag-remove [key],[option] [key1],[option1] …
Rmove field tags for the fields of a struct. If called inside a struct it automatically remove all field tags. An error message is given if it’s called outside a struct definition or if the file is not correctly formatted
If [range] is given, only the selected fields will be changed.
If [key] is given, it will only remove those keys. Example:
:go-tag-remove json
If [option] is passed with a [key], it will only remove the options. Example, this will only remove
omitempty
options from fields containingjson
::go-tag-remove json,omitempty
go-tag-refresh
(Useful when designing structures):[range]go-tag-refresh [key],[option] [key1],[option] …
Equal to:
:[range]go-tag-remove [key] [key1] …
:[range]go-tag-add [key],[option] [key1],[option] …
support the following transformations:
snakecase
:BaseDomain
->base_domain
camelcase
:BaseDomain
->baseDomain
lispcase
:BaseDomain
->base-domain
(setq go-tag-args (list "-transform" "camelcase"))
(with-eval-after-load 'go-mode
(define-key go-mode-map (kbd "C-c t") #'go-tag-add)
(define-key go-mode-map (kbd "C-c T") #'go-tag-remove))