Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
go
Commits
9b6009b6
Commit
9b6009b6
authored
Apr 25, 2009
by
Robert Griesemer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- minor formatting and capitalization (export) changes
TBR=rsc OCL=27861 CL=27861
parent
af8036aa
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
11 deletions
+28
-11
usr/gri/pretty/doc.go
usr/gri/pretty/doc.go
+28
-11
No files found.
usr/gri/pretty/doc.go
View file @
9b6009b6
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// TODO: printing is gone; install as "go/doc"
package
doc
import
(
...
...
@@ -51,6 +49,7 @@ type typeDoc struct {
// DocReader accumulates documentation for a single package.
//
type
DocReader
struct
{
name
string
;
// package name
path
string
;
// import path
...
...
@@ -64,6 +63,7 @@ type DocReader struct {
// Init initializes a DocReader to collect package documentation
// for the package with the given package name and import path.
//
func
(
doc
*
DocReader
)
Init
(
pkg
,
imp
string
)
{
doc
.
name
=
pkg
;
doc
.
path
=
imp
;
...
...
@@ -116,7 +116,7 @@ func (doc *DocReader) addFunc(fun *ast.FuncDecl) {
typ
.
methods
[
name
]
=
fun
;
}
// if the type wasn't found, it wasn't exported
// TODO: a non-exported type may still have exported functions
// TODO
(gri)
: a non-exported type may still have exported functions
// determine what to do in that case
return
;
}
...
...
@@ -189,7 +189,7 @@ func (doc *DocReader) AddProgram(prog *ast.Program) {
}
// add package documentation
// TODO what to do if there are multiple files?
// TODO
(gri)
what to do if there are multiple files?
if
prog
.
Doc
!=
nil
{
doc
.
doc
=
prog
.
Doc
}
...
...
@@ -203,7 +203,7 @@ func (doc *DocReader) AddProgram(prog *ast.Program) {
// ----------------------------------------------------------------------------
// Conversion to external representation
func
Regexp
(
s
string
)
*
regexp
.
Regexp
{
func
makeRex
(
s
string
)
*
regexp
.
Regexp
{
re
,
err
:=
regexp
.
Compile
(
s
);
if
err
!=
nil
{
panic
(
"MakeRegexp "
,
s
,
" "
,
err
.
String
());
...
...
@@ -220,16 +220,16 @@ var (
// TODO(rsc): Cannot use var initialization for regexps,
// because Regexp constructor needs threads.
func
S
etupRegexps
()
{
comment_markers
=
Regexp
(
"^[
\t
]*(// ?| ?
\\
* ?)"
);
trailing_whitespace
=
Regexp
(
"[
\t\r
]+$"
);
comment_junk
=
Regexp
(
"^[
\t
]*(/
\\
*|
\\
*/)[
\t
]*$"
);
func
s
etupRegexps
()
{
comment_markers
=
makeRex
(
"^[
\t
]*(// ?| ?
\\
* ?)"
);
trailing_whitespace
=
makeRex
(
"[
\t\r
]+$"
);
comment_junk
=
makeRex
(
"^[
\t
]*(/
\\
*|
\\
*/)[
\t
]*$"
);
}
// Aggregate comment text, without comment markers.
func
comment
(
comments
ast
.
Comments
)
string
{
once
.
Do
(
S
etupRegexps
);
once
.
Do
(
s
etupRegexps
);
lines
:=
make
([]
string
,
0
,
20
);
for
i
,
c
:=
range
comments
{
// split on newlines
...
...
@@ -295,8 +295,10 @@ func comment(comments ast.Comments) string {
return
strings
.
Join
(
lines
,
"
\n
"
);
}
// ValueDoc is the documentation for a group of declared
// values, either vars or consts.
//
type
ValueDoc
struct
{
Doc
string
;
Decl
*
ast
.
GenDecl
;
...
...
@@ -307,6 +309,7 @@ type sortValueDoc []*ValueDoc
func
(
p
sortValueDoc
)
Len
()
int
{
return
len
(
p
);
}
func
(
p
sortValueDoc
)
Swap
(
i
,
j
int
)
{
p
[
i
],
p
[
j
]
=
p
[
j
],
p
[
i
];
}
func
declName
(
d
*
ast
.
GenDecl
)
string
{
if
len
(
d
.
Specs
)
!=
1
{
return
""
...
...
@@ -322,6 +325,7 @@ func declName(d *ast.GenDecl) string {
return
""
;
}
func
(
p
sortValueDoc
)
Less
(
i
,
j
int
)
bool
{
// sort by name
// pull blocks (name = "") up to top
...
...
@@ -332,6 +336,7 @@ func (p sortValueDoc) Less(i, j int) bool {
return
p
[
i
]
.
order
<
p
[
j
]
.
order
;
}
func
makeValueDocs
(
v
*
vector
.
Vector
)
[]
*
ValueDoc
{
d
:=
make
([]
*
ValueDoc
,
v
.
Len
());
for
i
:=
range
d
{
...
...
@@ -345,6 +350,7 @@ func makeValueDocs(v *vector.Vector) []*ValueDoc {
// FuncDoc is the documentation for a func declaration,
// either a top-level function or a method function.
//
type
FuncDoc
struct
{
Doc
string
;
Recv
ast
.
Expr
;
// TODO(rsc): Would like string here
...
...
@@ -357,6 +363,7 @@ func (p sortFuncDoc) Len() int { return len(p); }
func
(
p
sortFuncDoc
)
Swap
(
i
,
j
int
)
{
p
[
i
],
p
[
j
]
=
p
[
j
],
p
[
i
];
}
func
(
p
sortFuncDoc
)
Less
(
i
,
j
int
)
bool
{
return
p
[
i
]
.
Name
<
p
[
j
]
.
Name
;
}
func
makeFuncDocs
(
m
map
[
string
]
*
ast
.
FuncDecl
)
[]
*
FuncDoc
{
d
:=
make
([]
*
FuncDoc
,
len
(
m
));
i
:=
0
;
...
...
@@ -401,6 +408,7 @@ func (p sortTypeDoc) Less(i, j int) bool {
return
p
[
i
]
.
order
<
p
[
j
]
.
order
;
}
// NOTE(rsc): This would appear not to be correct for type ( )
// blocks, but the doc extractor above has split them into
// individual statements.
...
...
@@ -425,6 +433,7 @@ func makeTypeDocs(m map[string] *typeDoc) []*TypeDoc {
// PackageDoc is the documentation for an entire package.
//
type
PackageDoc
struct
{
PackageName
string
;
ImportPath
string
;
...
...
@@ -437,6 +446,7 @@ type PackageDoc struct {
// Doc returns the accumulated documentation for the package.
//
func
(
doc
*
DocReader
)
Doc
()
*
PackageDoc
{
p
:=
new
(
PackageDoc
);
p
.
PackageName
=
doc
.
name
;
...
...
@@ -466,6 +476,7 @@ func isRegexp(s string) bool {
return
false
}
func
match
(
s
string
,
a
[]
string
)
bool
{
for
i
,
t
:=
range
a
{
if
isRegexp
(
t
)
{
...
...
@@ -480,6 +491,7 @@ func match(s string, a []string) bool {
return
false
;
}
func
matchDecl
(
d
*
ast
.
GenDecl
,
names
[]
string
)
bool
{
for
i
,
d
:=
range
d
.
Specs
{
switch
v
:=
d
.
(
type
)
{
...
...
@@ -498,6 +510,7 @@ func matchDecl(d *ast.GenDecl, names []string) bool {
return
false
;
}
func
filterValueDocs
(
a
[]
*
ValueDoc
,
names
[]
string
)
[]
*
ValueDoc
{
w
:=
0
;
for
i
,
vd
:=
range
a
{
...
...
@@ -509,6 +522,7 @@ func filterValueDocs(a []*ValueDoc, names []string) []*ValueDoc {
return
a
[
0
:
w
];
}
func
filterTypeDocs
(
a
[]
*
TypeDoc
,
names
[]
string
)
[]
*
TypeDoc
{
w
:=
0
;
for
i
,
td
:=
range
a
{
...
...
@@ -520,6 +534,7 @@ func filterTypeDocs(a []*TypeDoc, names []string) []*TypeDoc {
return
a
[
0
:
w
];
}
func
filterFuncDocs
(
a
[]
*
FuncDoc
,
names
[]
string
)
[]
*
FuncDoc
{
w
:=
0
;
for
i
,
fd
:=
range
a
{
...
...
@@ -531,10 +546,12 @@ func filterFuncDocs(a []*FuncDoc, names []string) []*FuncDoc {
return
a
[
0
:
w
];
}
// Filter eliminates information from d that is not
// about one of the given names.
// TODO: Recognize "Type.Method" as a name.
// TODO(r): maybe precompile the regexps.
//
func
(
p
*
PackageDoc
)
Filter
(
names
[]
string
)
{
p
.
Consts
=
filterValueDocs
(
p
.
Consts
,
names
);
p
.
Vars
=
filterValueDocs
(
p
.
Vars
,
names
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment