Skip to content

viewport jumps around while I type #4015

@mpictor

Description

@mpictor

What version of Go, VS Code & VS Code Go extension are you using?

Version Information
  • Run go version to get version of Go from the VS Code integrated terminal.
    • go version go1.26.1 linux/amd64
  • Run gopls -v version to get version of Gopls from the VS Code integrated terminal.
Build info
----------
golang.org/x/tools/gopls v0.21.1
    golang.org/x/tools/gopls@v0.21.1 h1:1/o9z5Brdero4jFm9Jr46Uwj8GU9lQdoSXHMlwRHb/w=
    github.com/BurntSushi/toml@v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
    github.com/fatih/camelcase@v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
    github.com/fatih/gomodifytags@v1.17.1-0.20250423142747-f3939df9aa3c h1:dDSgAjoOMp8da3egfz0t2S+t8RGOpEmEXZubcGuc0Bg=
    github.com/fatih/structtag@v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
    github.com/fsnotify/fsnotify@v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
    github.com/google/go-cmp@v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
    github.com/google/jsonschema-go@v0.3.0 h1:6AH2TxVNtk3IlvkkhjrtbUc4S8AvO0Xii0DxIygDg+Q=
    github.com/modelcontextprotocol/go-sdk@v0.8.0 h1:jdsBtGzBLY287WKSIjYovOXAqtJkP+HtFQFKrZd4a6c=
    github.com/yosida95/uritemplate/v3@v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
    golang.org/x/exp/typeparams@v0.0.0-20251023183803-a4bb9ffd2546 h1:HDjDiATsGqvuqvkDvgJjD1IgPrVekcSXVVE21JwvzGE=
    golang.org/x/mod@v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
    golang.org/x/sync@v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
    golang.org/x/sys@v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
    golang.org/x/telemetry@v0.0.0-20251111182119-bc8e575c7b54 h1:E2/AqCUMZGgd73TQkxUMcMla25GB9i/5HOdLr+uH7Vo=
    golang.org/x/text@v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
    golang.org/x/tools@v0.39.1-0.20260109155911-b69ac100ecb7 h1:UaaZx92hw3fDa9xRcX2//NBRE3sR4VHQLlt0TkN2geY=
    golang.org/x/vuln@v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I=
    honnef.co/go/tools@v0.7.0-0.dev.0.20251022135355-8273271481d0 h1:5SXjd4ET5dYijLaf0O3aOenC0Z4ZafIWSpjUzsQaNho=
    mvdan.cc/gofumpt@v0.8.0 h1:nZUCeC2ViFaerTcYKstMmfysj6uhQrA2vJe+2vwGU6k=
    mvdan.cc/xurls/v2@v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
go: go1.26.1
  • Run code -v or code-insiders -v to get version of VS Code or VS Code Insiders.
    • 1.115.0
    • 41dd792b5e652393e7787322889ed5fdc58bd75b
    • x64
  • Check your installed extensions to get the version of the VS Code Go extension
    • 0.52.2
  • Run Ctrl+Shift+P (Cmd+Shift+P on Mac OS) > Go: Locate Configured Go Tools command.
# Tools Configuration


## Environment

GOBIN: undefined
toolsGopath: 
gopath: $HOME/go
GOROOT: $HOME/sdk/go1.26.1
PATH: $HOME/sdk/go1.26.1/bin:$HOME/.cargo/bin:$HOME/.nix-profile/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/bin:/usr/lib/llvm/21/bin:/usr/lib/llvm/20/bin:/usr/lib64/opencascade/bin
PATH (vscode launched with): $HOME/.cargo/bin:$HOME/.nix-profile/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/bin:/usr/lib/llvm/21/bin:/usr/lib/llvm/20/bin:/usr/lib64/opencascade/bin

## Tools

	go:	$HOME/sdk/golatest/bin/go: go version go1.26.1 linux/amd64

	gotests:	$HOME/go/bin/gotests	(version: v1.6.0 built with go: go1.26.1)
	impl:	$HOME/go/bin/impl	(version: v1.4.0 built with go: go1.26.1)
	goplay:	$HOME/go/bin/goplay	(version: v1.0.0 built with go: go1.26.1)
	dlv:	$HOME/go/bin/dlv	(version: v1.26.1 built with go: go1.26.1)
	gopls:	$HOME/go/bin/gopls	(version: v0.21.1 built with go: go1.26.1)

## Go env

Workspace Folder (project): $HOME/Documents/project

	AR='ar'
	CC='gcc'
	CGO_CFLAGS='-O2 -g'
	CGO_CPPFLAGS=''
	CGO_CXXFLAGS='-O2 -g'
	CGO_ENABLED='1'
	CGO_FFLAGS='-O2 -g'
	CGO_LDFLAGS='-O2 -g'
	CXX='g++'
	GCCGO='gccgo'
	GO111MODULE=''
	GOAMD64='v1'
	GOARCH='amd64'
	GOAUTH='netrc'
	GOBIN=''
	GOCACHE='$HOME/.cache/go-build'
	GOCACHEPROG=''
	GODEBUG=''
	GOENV='$HOME/.config/go/env'
	GOEXE=''
	GOEXPERIMENT=''
	GOFIPS140='off'
	GOFLAGS=''
	GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build463893045=/tmp/go-build -gno-record-gcc-switches'
	GOHOSTARCH='amd64'
	GOHOSTOS='linux'
	GOINSECURE=''
	GOMOD='$HOME/Documents/project/go.mod'
	GOMODCACHE='$HOME/go/pkg/mod'
	GONOPROXY=''
	GONOSUMDB=''
	GOOS='linux'
	GOPATH='$HOME/go'
	GOPRIVATE=''
	GOPROXY='https://proxy.golang.org,direct'
	GOROOT='$HOME/sdk/go1.26.1'
	GOSUMDB='sum.golang.org'
	GOTELEMETRY='local'
	GOTELEMETRYDIR='$HOME/.config/go/telemetry'
	GOTMPDIR=''
	GOTOOLCHAIN='auto'
	GOTOOLDIR='$HOME/sdk/go1.26.1/pkg/tool/linux_amd64'
	GOVCS=''
	GOVERSION='go1.26.1'
	GOWORK=''
	PKG_CONFIG='pkg-config'
	
Workspace Folder (project2): $HOME/Documents/project2

	AR='ar'
	CC='gcc'
	CGO_CFLAGS='-O2 -g'
	CGO_CPPFLAGS=''
	CGO_CXXFLAGS='-O2 -g'
	CGO_ENABLED='1'
	CGO_FFLAGS='-O2 -g'
	CGO_LDFLAGS='-O2 -g'
	CXX='g++'
	GCCGO='gccgo'
	GO111MODULE=''
	GOAMD64='v1'
	GOARCH='amd64'
	GOAUTH='netrc'
	GOBIN=''
	GOCACHE='$HOME/.cache/go-build'
	GOCACHEPROG=''
	GODEBUG=''
	GOENV='$HOME/.config/go/env'
	GOEXE=''
	GOEXPERIMENT=''
	GOFIPS140='off'
	GOFLAGS=''
	GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build2571827086=/tmp/go-build -gno-record-gcc-switches'
	GOHOSTARCH='amd64'
	GOHOSTOS='linux'
	GOINSECURE=''
	GOMOD='/dev/null'
	GOMODCACHE='$HOME/go/pkg/mod'
	GONOPROXY=''
	GONOSUMDB=''
	GOOS='linux'
	GOPATH='$HOME/go'
	GOPRIVATE=''
	GOPROXY='https://proxy.golang.org,direct'
	GOROOT='$HOME/sdk/go1.26.1'
	GOSUMDB='sum.golang.org'
	GOTELEMETRY='local'
	GOTELEMETRYDIR='$HOME/.config/go/telemetry'
	GOTMPDIR=''
	GOTOOLCHAIN='auto'
	GOTOOLDIR='$HOME/sdk/go1.26.1/pkg/tool/linux_amd64'
	GOVCS=''
	GOVERSION='go1.26.1'
	GOWORK=''
	PKG_CONFIG='pkg-config'
	
Workspace Folder (gorp): $HOME/project3/rp2040/gorp

	AR='ar'
	CC='gcc'
	CGO_CFLAGS='-O2 -g'
	CGO_CPPFLAGS=''
	CGO_CXXFLAGS='-O2 -g'
	CGO_ENABLED='1'
	CGO_FFLAGS='-O2 -g'
	CGO_LDFLAGS='-O2 -g'
	CXX='g++'
	GCCGO='gccgo'
	GO111MODULE=''
	GOAMD64='v1'
	GOARCH='amd64'
	GOAUTH='netrc'
	GOBIN=''
	GOCACHE='$HOME/.cache/go-build'
	GOCACHEPROG=''
	GODEBUG=''
	GOENV='$HOME/.config/go/env'
	GOEXE=''
	GOEXPERIMENT=''
	GOFIPS140='off'
	GOFLAGS=''
	GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build2715395972=/tmp/go-build -gno-record-gcc-switches'
	GOHOSTARCH='amd64'
	GOHOSTOS='linux'
	GOINSECURE=''
	GOMOD='$HOME/project3/rp2040/gorp/go.mod'
	GOMODCACHE='$HOME/go/pkg/mod'
	GONOPROXY=''
	GONOSUMDB=''
	GOOS='linux'
	GOPATH='$HOME/go'
	GOPRIVATE=''
	GOPROXY='https://proxy.golang.org,direct'
	GOROOT='$HOME/sdk/go1.26.1'
	GOSUMDB='sum.golang.org'
	GOTELEMETRY='local'
	GOTELEMETRYDIR='$HOME/.config/go/telemetry'
	GOTMPDIR=''
	GOTOOLCHAIN='auto'
	GOTOOLDIR='$HOME/sdk/go1.26.1/pkg/tool/linux_amd64'
	GOVCS=''
	GOVERSION='go1.26.1'
	GOWORK=''
	PKG_CONFIG='pkg-config'
	
Workspace Folder (qemu_arm_uboot): $HOME/Documents/qemu_arm_uboot/qemu_arm_uboot

	AR='ar'
	CC='gcc'
	CGO_CFLAGS='-O2 -g'
	CGO_CPPFLAGS=''
	CGO_CXXFLAGS='-O2 -g'
	CGO_ENABLED='1'
	CGO_FFLAGS='-O2 -g'
	CGO_LDFLAGS='-O2 -g'
	CXX='g++'
	GCCGO='gccgo'
	GO111MODULE=''
	GOAMD64='v1'
	GOARCH='amd64'
	GOAUTH='netrc'
	GOBIN=''
	GOCACHE='$HOME/.cache/go-build'
	GOCACHEPROG=''
	GODEBUG=''
	GOENV='$HOME/.config/go/env'
	GOEXE=''
	GOEXPERIMENT=''
	GOFIPS140='off'
	GOFLAGS=''
	GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build4171093290=/tmp/go-build -gno-record-gcc-switches'
	GOHOSTARCH='amd64'
	GOHOSTOS='linux'
	GOINSECURE=''
	GOMOD='$HOME/Documents/qemu_arm_uboot/qemu_arm_uboot/go.mod'
	GOMODCACHE='$HOME/go/pkg/mod'
	GONOPROXY=''
	GONOSUMDB=''
	GOOS='linux'
	GOPATH='$HOME/go'
	GOPRIVATE=''
	GOPROXY='https://proxy.golang.org,direct'
	GOROOT='$HOME/sdk/go1.26.1'
	GOSUMDB='sum.golang.org'
	GOTELEMETRY='local'
	GOTELEMETRYDIR='$HOME/.config/go/telemetry'
	GOTMPDIR=''
	GOTOOLCHAIN='auto'
	GOTOOLDIR='$HOME/sdk/go1.26.1/pkg/tool/linux_amd64'
	GOVCS=''
	GOVERSION='go1.26.1'
	GOWORK=''
	PKG_CONFIG='pkg-config'
	

Share the Go related settings you have added/edited

Run Preferences: Open Settings (JSON) command to open your settings.json file.
Share all the settings with the go. or ["go"] or gopls prefixes.

"go.alternateTools": {
        "go": "$HOME/sdk/golatest/bin/go",
    },

Describe the bug

A clear and concise description of what the bug.

While I am typing code, the view jumps around because folded code unfolds, then refolds after I type a bit more.

I have verified that the viewport changes do not happen if the go extension is disabled. In addition, it still happens when all extensions other than vscode-go are disabled.

A clear and concise description of what you expected to happen.

The lines in view stay stable, only changing when additional lines are added. Code folding/unfolding does not happen unless I trigger it (mouse over gutter symbol, fold/unfold hotkey, or arrows move the cursor into folded region and force it to unfold).

Steps to reproduce the behavior:

  1. Open a go file. Scroll to the bottom. Fold the last function in the file.
  2. Paste the following below it:
func parmHelp(_ context.Context, args []string) error {
	// TODO
	return nil
}
  1. Create a new line before // TODO and start typing if len(args)==0{}
  2. View jumps as folded code unfolds/refolds for no reason.

Screenshots or recordings

If applicable, add screenshots or recordings to help explain your problem.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions