Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Side by Side Diff: mojom/mojom_parser/parser_main.go

Issue 1702873002: Mojom formatter incorporated in the mojom binary. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojom/mojom_parser/parse_cmd.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /*
6 This file contains the main() for the Mojom parser binary. This tool parses
7 a set of .mojom files and emits a serialized MojomFileGraph struct. See
8 mojom_files.mojom for the definition of MojomFileGraph.
9
10 The tool is invoked as follows:
11
12 mojom_parser [-I <include_dirs>] [-out <out_file>] [-debug] <mojom_file>...
13
14 <include_dirs> is comma-separated list of directory paths to search for mojom i mports.
15 <out_file> is the path to the output file. If not given the output will be writ ten to standard out.
16 <mojom_file>... is one or more paths to .mojom files to be parsed.
17
18 If there are no errors then the program returns status zero and writes nothing
19 to standard error and writes nothing to standard out except possibly the output
20 if <out_file> is not specified. If there are any errors then the program return s
21 status code 1 and writes error messages to standard error.
22
23 If -debug is specified then the program emits lots of debugging data to
24 standard out, including a depiction of the parse trees. If also <out_file> is
25 not specified then the actual output is written at the end after the debugging
26 data.
27 */
28
29 package main
30
31 import (
32 "bufio"
33 "flag"
34 "fmt"
35 "io/ioutil"
36 "mojom/mojom_parser/mojom"
37 "mojom/mojom_parser/parser"
38 "mojom/mojom_parser/serialization"
39 "os"
40 "path/filepath"
41 "strings"
42 )
43
44 // DirectoryList holds the result of parsing a command-line flag
45 // that accepts a comma-separated list of directory paths. This
46 // type satisfies the flag.Value interface.
47 type DirectoryList []string
48
49 func (dl *DirectoryList) String() string {
50 return fmt.Sprintf("%v", *dl)
51 }
52
53 func (dl *DirectoryList) Set(args string) error {
54 for _, name := range strings.Split(args, ",") {
55 info, err := os.Stat(name)
56 if err != nil {
57 return err
58 }
59 if !info.IsDir() {
60 return fmt.Errorf("%s is not a directory.", name)
61 }
62 *dl = append(*dl, name)
63 }
64 return nil
65 }
66
67 var directoryListFlag DirectoryList
68
69 func init() {
70 flag.Var(&directoryListFlag, "I", "comma-separated list of directory pat hs to search for mojom imports")
71 }
72
73 func main() {
74 outFile := flag.String("out", "", "The path to the output file. If not p resent the output will "+
75 "be written to standard out.")
76 debug := flag.Bool("debug", false, "Generate debug data including the pa rse tree and print it to standard out.")
77 metaDataOnly := flag.Bool("meta-data-only", false, "Only parse file attr ibutes and 'module' statement, "+
78 "not mojom declarations or import statements.")
79 flag.Parse()
80
81 fileNames := flag.Args()
82 if len(fileNames) == 0 {
83 ErrorExit(fmt.Sprintf("No .mojom files given.\n"+
84 "Usage: %s [-I <include_dirs>] [-out <out_file>] [-debug ] [-meta-data-only] <mojom_file>...",
85 filepath.Base(os.Args[0])))
86 }
87
88 parseDriver := parser.NewDriver(directoryListFlag, *debug, *metaDataOnly )
89
90 // Do the parsing
91 descriptor, err := parseDriver.ParseFiles(fileNames)
92 if err != nil {
93 ErrorExit(fmt.Sprintf("%s", err.Error()))
94 } else if *debug {
95 fmt.Println("Parsing complete.")
96 }
97
98 // Serialize the result.
99 bytes, debug_string, err := serialization.Serialize(descriptor, *debug)
100 if err != nil {
101 ErrorExit(fmt.Sprintf("Serialization error: %s", err))
102 }
103
104 // In debug mode print out the debug information.
105 if *debug {
106 PrintDebugOutput(debug_string, descriptor)
107 }
108
109 // Emit the output to a file or standard out.
110 if len(*outFile) == 0 {
111 w := bufio.NewWriter(os.Stdout)
112 if _, err := w.Write(bytes); err != nil {
113 ErrorExit(fmt.Sprintf("Error writing output to standard out: %s.", *outFile, err.Error()))
114 }
115 w.Flush()
116 } else {
117 if err := ioutil.WriteFile(*outFile, bytes, os.ModePerm); err != nil {
118 ErrorExit(fmt.Sprintf("Error writing output to %s: %s.", *outFile, err.Error()))
119 } else {
120 if *debug {
121 fmt.Printf("The output was written to %s.\n", *o utFile)
122 }
123 }
124 }
125 }
126
127 func ErrorExit(message string) {
128 fmt.Fprintf(os.Stderr, "%s\n", message)
129 os.Exit(1)
130 }
131
132 func PrintDebugOutput(debugString string, descriptor *mojom.MojomDescriptor) {
133 fmt.Println("\n\n=============================================")
134 fmt.Println("\n Pre-Serialized Go Object:")
135 fmt.Printf("\n%s\n", descriptor.String())
136 fmt.Println("\n\n=============================================")
137 fmt.Println("\n Debug Serialized Output:")
138 fmt.Println(debugString)
139 }
OLDNEW
« no previous file with comments | « mojom/mojom_parser/parse_cmd.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698