annotate trunk/src/cmd/Statistics.d @ 391:33b566df6af4

Migrated project to Tango. Decremented the numbers of the format placeholders in the localized messages by one. Replaced all instances of writef/ln with Stdout. Added module common.d with string aliases and a global Layout!(char) instance. Replaced %s format specifiers with index placeholders in html/xml_tags. Changed member Information.arguments to string message. Copied std.metastring, std.uni and std.utf from Phobos.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 15 Sep 2007 17:12:26 +0200
parents 1059295c2727
children fcdf7ac5ad27
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;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
19 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
20
364
1059295c2727 - Every command module has an execute method now.
aziz
parents: 363
diff changeset
21 void execute(string fileName)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
22 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
23 auto sourceText = loadFile(fileName);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
24 auto lx = new Lexer(sourceText, fileName);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
25
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
26 auto token = lx.getTokens();
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
27
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
28 Statistics stats;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
29 // Traverse linked list.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
30 while (token.type != TOK.EOF)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
31 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
32 token = token.next;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
33
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
34 // Count whitespace characters
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
35 if (token.ws)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
36 {
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
37 // TODO: naive method doesn't account for \r\n, LS and PS.
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
38 stats.whitespaceCount += token.start - token.ws;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
39 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
40
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
41 switch (token.type)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
42 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
43 case TOK.Identifier:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
44 stats.identCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
45 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
46 case TOK.Comment:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
47 stats.commentCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
48 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
49 case TOK.Int32, TOK.Int64, TOK.Uint32, TOK.Uint64,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
50 TOK.Float32, TOK.Float64, TOK.Float80,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
51 TOK.Imaginary32, TOK.Imaginary64, TOK.Imaginary80:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
52 stats.numberCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
53 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
54 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
55 if (token.isKeyword)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
56 stats.keywordCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
57 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
58
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
59 if (token.isWhitespace)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
60 stats.wsTokenCount++;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
61 }
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
62 Stdout.formatln(
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
63 "Whitespace character count: {0}\n"
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
64 "Whitespace token count: {1}\n"
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
65 "Keyword count: {2}\n"
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
66 "Identifier count: {3}\n"
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
67 "Number count: {4}\n"
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
68 "Comment count: {5}\n"
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
69 "Lines of code: {6}",
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
70 stats.whitespaceCount,
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
71 stats.wsTokenCount,
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
72 stats.keywordCount,
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
73 stats.identCount,
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
74 stats.numberCount,
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
75 stats.commentCount,
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 364
diff changeset
76 lx.loc);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
77 }