I'd like to locate the number of classes and interfaces for Scala programs. I tried doing this with this source but it's still returning output for other languages. What am I missing?
# Computes Number of Attributes (NOA) for each project, per-type
# Output is: NOA[Project Language][Project Name][TypeName][Type Kind] = NOA value
p: Project = input;
NOA: output sum[string][string][string][string] of int;
visit(p, visitor {
# only look at the latest snapshot
before n: Project -> ifall (i: int; !match(`^scala$`, lowercase(n.programming_languages[i]))) stop;
before n2: CodeRepository -> {
if (hasfiletype(n2, "scala")) {
snapshot := getsnapshot(n2);
foreach (i: int; def(snapshot[i]))
visit(snapshot[i]);
stop;
}
}
before node: Declaration -> {
if (node.kind == TypeKind.CLASS)
NOA[p.programming_languages[0]][
p.name][
node.name]["class"] << len(node.fields);
if (node.kind == TypeKind.ANNOTATION)
NOA[p.programming_languages[0]][
p.name][
node.name]["annotation"] << len(node.fields);
if (node.kind == TypeKind.ANONYMOUS)
NOA[p.programming_languages[0]][
p.name][
node.name]["anonymous"] << len(node.fields);
if (node.kind == TypeKind.DELEGATE)
NOA[p.programming_languages[0]][
p.name][
node.name]["delegate"] << len(node.fields);
if (node.kind == TypeKind.ENUM)
NOA[p.programming_languages[0]][
p.name][
node.name]["enum"] << len(node.fields);
if (node.kind == TypeKind.GENERIC)
NOA[p.programming_languages[0]][
p.name][
node.name]["generic"] << len(node.fields);
if (node.kind == TypeKind.INTERFACE)
NOA[p.programming_languages[0]][
p.name][
node.name]["interface"] << len(node.fields);
if (node.kind == TypeKind.OTHER)
NOA[p.programming_languages[0]][
p.name][
node.name]["other"] << len(node.fields);
if (node.kind == TypeKind.STRUCT)
NOA[p.programming_languages[0]][
p.name][
node.name]["struct"] << len(node.fields);
}
});