Mercurial > projects > dil
annotate trunk/src/cmd/Statistics.d @ 506:1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Wed, 12 Dec 2007 02:28:37 +0100 |
parents | ea8c7459f1c4 |
children | 581b3cf3fe8f |
rev | line source |
---|---|
363 | 1 /++ |
2 Author: Aziz Köksal | |
3 License: GPL3 | |
4 +/ | |
5 module cmd.Statistics; | |
6 import dil.Token; | |
7 import dil.File; | |
8 import dil.Lexer; | |
391
33b566df6af4
Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
364
diff
changeset
|
9 import common; |
363 | 10 |
11 struct Statistics | |
12 { | |
13 uint whitespaceCount; | |
14 uint wsTokenCount; | |
15 uint keywordCount; | |
16 uint identCount; | |
17 uint numberCount; | |
18 uint commentCount; | |
401
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
19 uint linesOfCode; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
20 |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
21 void opAddAssign(Statistics s) |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
22 { |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
23 this.whitespaceCount += s.whitespaceCount; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
24 this.wsTokenCount += s.wsTokenCount; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
25 this.keywordCount += s.keywordCount; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
26 this.identCount += s.identCount; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
27 this.numberCount += s.numberCount; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
28 this.commentCount += s.commentCount; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
29 this.linesOfCode += s.linesOfCode; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
30 } |
363 | 31 } |
32 | |
401
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
33 void execute(string[] filePaths) |
363 | 34 { |
401
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
35 Statistics[] stats; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
36 foreach (filePath; filePaths) |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
37 stats ~= getStatistics(filePath); |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
38 |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
39 Statistics total; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
40 |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
41 foreach (i, ref stat; stats) |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
42 { |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
43 total += stat; |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
44 Stdout.formatln( |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
45 "----\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
46 "File: {0}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
47 "Whitespace character count: {1}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
48 "Whitespace token count: {2}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
49 "Keyword count: {3}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
50 "Identifier count: {4}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
51 "Number count: {5}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
52 "Comment count: {6}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
53 "Lines of code: {7}", |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
54 filePaths[i], |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
55 stat.whitespaceCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
56 stat.wsTokenCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
57 stat.keywordCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
58 stat.identCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
59 stat.numberCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
60 stat.commentCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
61 stat.linesOfCode |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
62 ); |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
63 } |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
64 |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
65 if (filePaths.length > 1) |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
66 Stdout.formatln( |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
67 "--------------------------------------------------------------------------------\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
68 "Total:\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
69 "Whitespace character count: {0}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
70 "Whitespace token count: {1}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
71 "Keyword count: {2}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
72 "Identifier count: {3}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
73 "Number count: {4}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
74 "Comment count: {5}\n" |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
75 "Lines of code: {6}", |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
76 total.whitespaceCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
77 total.wsTokenCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
78 total.keywordCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
79 total.identCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
80 total.numberCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
81 total.commentCount, |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
82 total.linesOfCode |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
83 ); |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
84 } |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
85 |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
86 Statistics getStatistics(string filePath) |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
87 { |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
88 auto sourceText = loadFile(filePath); |
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
89 auto lx = new Lexer(sourceText, filePath); |
506
1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
485
diff
changeset
|
90 lx.scanAll(); |
1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
485
diff
changeset
|
91 auto token = lx.firstToken(); |
363 | 92 |
93 Statistics stats; | |
401
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
94 |
485
ea8c7459f1c4
Changed a lot of things in the Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
401
diff
changeset
|
95 stats.linesOfCode = lx.lineNum; |
363 | 96 // Traverse linked list. |
97 while (token.type != TOK.EOF) | |
98 { | |
99 token = token.next; | |
100 | |
101 // Count whitespace characters | |
401
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
102 if (token.ws !is null) |
506
1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
485
diff
changeset
|
103 stats.whitespaceCount += token.start - token.ws; |
363 | 104 |
105 switch (token.type) | |
106 { | |
107 case TOK.Identifier: | |
108 stats.identCount++; | |
109 break; | |
110 case TOK.Comment: | |
111 stats.commentCount++; | |
112 break; | |
113 case TOK.Int32, TOK.Int64, TOK.Uint32, TOK.Uint64, | |
114 TOK.Float32, TOK.Float64, TOK.Float80, | |
115 TOK.Imaginary32, TOK.Imaginary64, TOK.Imaginary80: | |
116 stats.numberCount++; | |
117 break; | |
506
1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
485
diff
changeset
|
118 case TOK.Newline: |
1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
485
diff
changeset
|
119 break; |
363 | 120 default: |
121 if (token.isKeyword) | |
122 stats.keywordCount++; | |
506
1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
485
diff
changeset
|
123 else if (token.isWhitespace) |
1b897a4536a4
Refactored code and fixed a few things in cmd.Statistics.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
485
diff
changeset
|
124 stats.wsTokenCount++; |
363 | 125 } |
126 } | |
401
fcdf7ac5ad27
Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
391
diff
changeset
|
127 return stats; |
363 | 128 } |