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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
1 /++
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
2 Author: Aziz Köksal
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
3 License: GPL3
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
4 +/
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
5 module cmd.Statistics;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
6 import dil.Token;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
7 import dil.File;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
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
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
10
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
11 struct Statistics
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
12 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
13 uint whitespaceCount;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
14 uint wsTokenCount;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
15 uint keywordCount;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
16 uint identCount;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
17 uint numberCount;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
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
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
31 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
32
401
fcdf7ac5ad27 Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
33 void execute(string[] filePaths)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
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
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
92
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
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
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
96 // Traverse linked list.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
97 while (token.type != TOK.EOF)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
98 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
99 token = token.next;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
100
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
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
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
104
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
105 switch (token.type)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
106 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
107 case TOK.Identifier:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
108 stats.identCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
109 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
110 case TOK.Comment:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
111 stats.commentCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
112 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
113 case TOK.Int32, TOK.Int64, TOK.Uint32, TOK.Uint64,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
114 TOK.Float32, TOK.Float64, TOK.Float80,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
115 TOK.Imaginary32, TOK.Imaginary64, TOK.Imaginary80:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
116 stats.numberCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
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
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
120 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
121 if (token.isKeyword)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
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
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
125 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
126 }
401
fcdf7ac5ad27 Improved statistics generation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
127 return stats;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
128 }