tools/godoc
Alan Donovan 99e8fee2bf x/tools: fset.File(file.Pos()) -> fset.File(file.FileStart)
This CL fixes a bug (#70149) in gopls/internal/golang/pkgdoc.go
in which a call to fset.File(file.Pos()) would return nil
because when file points to an empty ast.File, Pos() returns NoPos.

Instead, we should use file.FileStart, which is (in principle)
always valid even for an empty file. However, there is a separate
bug in go1.23 (#70162) that means FileStart is invalid whenever
Pos() is. So, this fix only works with go1.24, and there's no
real workaround short of the additional logic this CL adds to
parsego.Parse, which at least covers all of gopls.

Also, we audit all of x/tools for similar faulty uses of Pos()
and replace them with FileStart. In future, we should use File.Pos
only for its specific meaning related to the package decl.

Fixes golang/go#70149
Updates golang/go#70162

Change-Id: Ic8cedfe912e44a0b4eb6e5e6874a6266d4be9076
Reviewed-on: https://go-review.googlesource.com/c/tools/+/624437
Reviewed-by: Robert Findley <rfindley@google.com>
Auto-Submit: Alan Donovan <adonovan@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2024-11-04 15:48:36 +00:00
..
analysis all: gofmt 2022-04-12 17:53:17 +00:00
redirect godoc/redirect: delete golang.org-specific code 2022-08-16 14:47:05 +00:00
static tools: replace references to obsolete package ioutils 2023-09-12 20:13:37 +00:00
util all: gofmt 2022-04-12 17:53:17 +00:00
vfs tools: clean up after removing all references to ioutil 2023-09-18 16:47:49 +00:00
README.md godoc: add GoogleCN property to pages 2017-08-02 21:09:52 +00:00
corpus.go godoc: remove Corpus.testDir field 2019-09-24 05:20:46 +00:00
dirtrees.go all: fix some comments 2023-05-05 17:25:45 +00:00
dirtrees_test.go godoc: add benchmark for directory scan 2018-04-15 15:36:21 +00:00
format.go all: gofmt 2022-04-12 17:53:17 +00:00
godoc.go x/tools: drop go1.18 support 2024-02-29 16:54:26 +00:00
godoc17_test.go all: go fmt ./... 2021-02-20 03:28:52 +00:00
godoc_test.go internal/typeparams: delete const Enabled=true and simplify 2023-12-12 19:05:48 +00:00
index.go x/tools: fset.File(file.Pos()) -> fset.File(file.FileStart) 2024-11-04 15:48:36 +00:00
index_test.go x/tools/godoc: gofmt -s -w 2017-02-15 21:42:32 +00:00
linkify.go internal/typeparams: eliminate type aliases 2023-12-12 19:05:56 +00:00
markdown.go godoc: convert Markdown files to HTML during serving 2021-02-12 16:44:11 +00:00
meta.go all: fix some comments 2023-01-31 16:03:41 +00:00
page.go godoc: delete GoogleCN logic 2021-03-12 18:55:53 +00:00
parser.go godoc: re-add test for ignoring //line comments in source code 2019-05-28 20:18:05 +00:00
pres.go cmd/godoc, godoc/static: remove remnants of golang.org website 2019-11-20 19:55:55 +00:00
search.go godoc: delete GoogleCN logic 2021-03-12 18:55:53 +00:00
server.go internal/typeparams: eliminate type aliases 2023-12-12 19:05:56 +00:00
server_test.go internal/typeparams: delete const Enabled=true and simplify 2023-12-12 19:05:48 +00:00
snippet.go godoc: add version info for struct fields 2018-07-17 23:22:00 +00:00
spec.go godoc: accept scanner.RawString too during EBNF parsing 2018-06-25 04:25:21 +00:00
spec_test.go godoc: accept scanner.RawString too during EBNF parsing 2018-06-25 04:25:21 +00:00
spot.go all: gofmt 2022-04-12 17:53:17 +00:00
tab.go godoc: add missing copyright 2015-04-27 04:29:37 +00:00
template.go godoc: fix test failure 2018-06-13 15:25:43 +00:00
versions.go all: remove repetitive words 2023-07-19 19:13:53 +00:00
versions_test.go all: fix x/tools tests that fail with a go1.23.1 go.work file 2024-10-28 22:46:16 +00:00

README.md

godoc

This directory contains most of the code for running a godoc server. The executable lives at golang.org/x/tools/cmd/godoc.

Development mode

In production, CSS/JS/template assets need to be compiled into the godoc binary. It can be tedious to recompile assets every time, but you can pass a flag to load CSS/JS/templates from disk every time a page loads:

godoc -templates=$GOPATH/src/golang.org/x/tools/godoc/static -http=:6060

Recompiling static assets

The files that live at static/style.css, static/jquery.js and so on are not present in the final binary. They are placed into static/static.go by running go generate. So to compile a change and test it in your browser:

  1. Make changes to e.g. static/style.css.

  2. Run go generate golang.org/x/tools/godoc/static so static/static.go picks up the change.

  3. Run go install golang.org/x/tools/cmd/godoc so the compiled godoc binary picks up the change.

  4. Run godoc -http=:6060 and view your changes in the browser. You may need to disable your browser's cache to avoid reloading a stale file.