Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
golang
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
golang
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
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
11 deletions
+28
-11
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,8 +116,8 @@ 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
// determine what to do in that case
// 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