| Index: mojom/mojom_parser/formatter/printer.go
|
| diff --git a/mojom/mojom_parser/formatter/printer.go b/mojom/mojom_parser/formatter/printer.go
|
| index 973d0e926242f8a9b8e40ca671f32af7adbc57c2..821defa5602180b0a02ea896ba1b065f949929b4 100644
|
| --- a/mojom/mojom_parser/formatter/printer.go
|
| +++ b/mojom/mojom_parser/formatter/printer.go
|
| @@ -96,7 +96,7 @@ func (p *printer) writeMojomFile(mojomFile *mojom.MojomFile) {
|
| }
|
|
|
| if mojomFile.FinalComments != nil {
|
| - finalComments := trimEmptyLines(mojomFile.FinalComments)
|
| + finalComments := trimEmptyLinesEnd(mojomFile.FinalComments)
|
| if len(finalComments) > 0 {
|
| p.nl()
|
| p.writeCommentBlocks(finalComments, true)
|
| @@ -375,6 +375,9 @@ func (p *printer) writeDeclaredObjectsContainer(container mojom.DeclaredObjectsC
|
| p.nl()
|
| declaredObjects := container.GetDeclaredObjects()
|
| for i, declaredObject := range declaredObjects {
|
| + if i == 0 {
|
| + trimEmptyLinesDeclaredObject(declaredObject)
|
| + }
|
| p.writeDeclaredObject(declaredObject)
|
| if i < len(declaredObjects)-1 {
|
| p.nl()
|
| @@ -632,7 +635,7 @@ func (p *printer) writeCommentBlocks(comments []lexer.Token, finalEol bool) {
|
| } else if comment.Text == "// end-no-format" {
|
| p.endNoFormat(comment)
|
| }
|
| - p.write(comment.Text)
|
| + p.writeSingleLineComment(comment)
|
| if finalEol || i < len(comments)-1 {
|
| p.nl()
|
| }
|
| @@ -653,6 +656,21 @@ func (p *printer) writeCommentBlocks(comments []lexer.Token, finalEol bool) {
|
| }
|
| }
|
|
|
| +func (p *printer) writeSingleLineComment(comment lexer.Token) {
|
| + if comment.Kind != lexer.SingleLineComment {
|
| + panic(fmt.Sprintf("This is not a SingleLineComment: %s", comment))
|
| + }
|
| + commentText := comment.Text
|
| +
|
| + // We expect that the first 2 characters are // followed by a space or tab.
|
| + // If the third character is not a space or tab, we insert a space.
|
| + space := commentText[2]
|
| + if space != ' ' && space != '\t' {
|
| + commentText = "// " + commentText[2:]
|
| + }
|
| + p.write(commentText)
|
| +}
|
| +
|
| func (p *printer) writeMultiLineComment(comment lexer.Token) {
|
| if comment.Kind != lexer.MultiLineComment {
|
| panic(fmt.Sprintf("This is not a MultiLineComment: %s", comment))
|
| @@ -734,7 +752,8 @@ func (p *printer) nl() {
|
| // Before going to the next line, print the last comment on the line.
|
| if p.eolComment != nil {
|
| if !p.noFormat {
|
| - p.writef(" %s", p.eolComment.Text)
|
| + p.write(" ")
|
| + p.writeSingleLineComment(*p.eolComment)
|
| }
|
| p.eolComment = nil
|
| }
|
| @@ -868,8 +887,8 @@ func containsFinalComments(el mojom.MojomElement) bool {
|
| return false
|
| }
|
|
|
| -// trimEmptyLines trims out empty line comments at the end of a slice of comments.
|
| -func trimEmptyLines(comments []lexer.Token) []lexer.Token {
|
| +// trimEmptyLinesEnd trims out empty line comments at the end of a slice of comments.
|
| +func trimEmptyLinesEnd(comments []lexer.Token) []lexer.Token {
|
| lastNonEmpty := -1
|
| for i, comment := range comments {
|
| if comment.Kind != lexer.EmptyLine {
|
| @@ -879,6 +898,35 @@ func trimEmptyLines(comments []lexer.Token) []lexer.Token {
|
| return comments[:lastNonEmpty+1]
|
| }
|
|
|
| +// trimEmptyLinesBegin trims out empty line comments at the beginning of a slice of comments.
|
| +func trimEmptyLinesBegin(comments []lexer.Token) []lexer.Token {
|
| + for i, comment := range comments {
|
| + if comment.Kind != lexer.EmptyLine {
|
| + return comments[i:]
|
| + }
|
| + }
|
| + return comments[len(comments):]
|
| +}
|
| +
|
| +// trimEmptyLinesDeclaredObject trims out empty lines from the beginning of the
|
| +// comments on a DeclaredObject or its Attributes.
|
| +func trimEmptyLinesDeclaredObject(declaredObject mojom.DeclaredObject) {
|
| + if declaredObject.Attributes() != nil {
|
| + comments := declaredObject.Attributes().AttachedComments()
|
| + if comments == nil {
|
| + return
|
| + }
|
| + comments.Above = trimEmptyLinesBegin(comments.Above)
|
| + return
|
| + }
|
| + comments := declaredObject.AttachedComments()
|
| +
|
| + if comments == nil || len(comments.Above) == 0 {
|
| + return
|
| + }
|
| + comments.Above = trimEmptyLinesBegin(comments.Above)
|
| +}
|
| +
|
| // Following is a utility to sort slices of |ImportedFile|s.
|
|
|
| // sortImportedFiles sorts the slice of imported files it receives.
|
|
|