♥ We love pull requests from everyone !
When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.
This video walks through the process of adding a small feature to lazygit. If you have no idea where to start, watching that video is a good first step.
See here for a set of design principles that we want to consider when building a feature or making a change.
This doc explains:
Pull requests are the best way to propose changes to the codebase. We actively welcome your pull requests:
master
.Please do not raise pull request from your fork's master branch: make a feature branch instead. Lazygit maintainers will sometimes push changes to your branch when reviewing a PR and we often can't do this if you use your master branch.
If you've never written Go in your life, then join the club! Lazygit was the maintainer's first Go program, and most contributors have never used Go before. Go is widely considered an easy-to-learn language, so if you're looking for an open source project to gain dev experience, you've come to the right place.
If you want to spare yourself the hassle of setting up your dev environment yourself (i.e. installing Go, extensions, and extra tools), you can run the Lazygit code in a VSCode dev container like so:
This requires that:
See here for more info about dev containers.
If you want to start contributing to Lazygit with the click of a button, you can open the lazygit codebase in a Codespace. First fork the repo, then click to create a codespace:
To run lazygit from within the integrated terminal just go go run main.go
This allows you to contribute to Lazygit without needing to install anything on your local machine. The Codespace has all the necessary tools and extensions pre-installed.
Please note by participating in this project, you agree to abide by the code of conduct.
In short, when you submit code changes, your submissions are understood to be under the same MIT License that covers the project. Feel free to contact the maintainers if that's a concern.
We use GitHub issues to track public bugs. Report a bug by opening a new issue; it's that easy!
This project is written in Go. Go is an opinionated language with strict idioms, but some of those idioms are a little extreme. Some things we do differently:
self
as a receiver name in a struct method. In fact we encourage itvar _ MyInterface = &MyStruct{}
This makes the intent clearer and means that if we fail to satisfy the interface we'll get an error in the file that needs fixing.
To check code formatting gofumpt (which is a bit stricter than gofmt) is used.
VSCode will format the code correctly if you tell the Go extension to use gofumpt
via your settings.json
by setting formatting.gofumpt
to true
:
// .vscode/settings.json
{
"gopls": {
"formatting.gofumpt": true
}
}
To run gofumpt from your terminal go:
go install mvdan.cc/gofumpt@latest && gofumpt -l -w .
Lazygit supports Nerd Fonts to render certain icons. Sometimes we use some of these icons verbatim in string literals in the code (mainly in tests), so you need to set your development environment to use a nerd font to see these.
Boy that's a hard word to spell. Anyway, lazygit is translated into several languages within the pkg/i18n package. If you need to render text to the user, you should add a new field to the TranslationSet struct in pkg/i18n/english.go
and add the actual content within the EnglishTranslationSet()
method in the same file. Then you can access via gui.Tr.YourNewText
(or self.c.Tr.YourNewText
, etc). Although it is appreciated if you translate the text into other languages, it's not expected of you (google translate will likely do a bad job anyway!).
Note, we use 'Sentence case' for everything (so no 'Title Case' or 'whatever-it's-called-when-there's-no-capital-letters-case')
The easiest way to debug lazygit is to have two terminal tabs open at once: one for running lazygit (via go run main.go -debug
in the project root) and one for viewing lazygit's logs (which can be done via go run main.go --logs
or just lazygit --logs
).
From most places in the codebase you have access to a logger e.g. gui.Log.Warn("blah")
or self.c.Log.Warn("blah")
.
If you find that the existing logs are too noisy, you can set the log level with e.g. LOG_LEVEL=warn go run main.go -debug
and then only use Warn
logs yourself.
If you need to log from code in the vendor directory (e.g. the gocui
package), you won't have access to the logger, but you can easily add logging support by setting the LAZYGIT_LOG_PATH
environment variable and using logs.Global.Warn("blah")
. This is a global logger that's only intended for development purposes.
If you keep having to do some setup steps to reproduce an issue, read the Testing section below to see how to create an integration test by recording a lazygit session. It's pretty easy!
If you want to trigger a debug session from VSCode, you can use the following snippet. Note that the console
key is, at the time of writing, still an experimental feature.
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "debug lazygit",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "main.go",
"args": ["--debug"],
"console": "externalTerminal" // <-- you need this to actually see the lazygit UI in a window while debugging
}
]
}
If you want to investigate what's contributing to CPU or memory usage, see this separate document.
Lazygit has two kinds of tests: unit tests and integration tests. Unit tests go in files that end in _test.go
, and are written in Go. For integration tests, see here
Sometimes you will need to make a change in the gocui fork (https://github.com/jesseduffield/gocui). Gocui is the package responsible for rendering windows and handling user input. Here's the typical process to follow:
awesome
branch, not master
)./scripts/bump_gocui.sh
Lazycore is a repo containing shared functionality between lazygit and lazydocker. Sometimes you will need to make a change to that repo and import the changes into lazygit. Similar to updating Gocui, here's what you do:
master
branch)./scripts/bump_lazycore.sh
Or if you're using VSCode, there is a bump lazycore task you can find by going cmd+shift+p
and typing 'Run task'
If you can think of any way to improve these docs let us know.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )