These numbers are taken from the FastParse test suite, which runs over the following libraries:
- fastparse
- scalaJs
- scalaz
- shapeless
- akka
- lift
- play
- PredictionIO
- spark
- sbt
- cats
- finagle
- kafka
- breeze
- spire
- saddle
- scala
And checks how often each rule succeeds. This covers >15,000 files and >12,000,000 LOC
The raw numbers are below:
| Rule | Count |
|---|---|
| Ideographic | 0 |
| PI | 0 |
| EmptyElemTagPEnd | 0 |
| CDStart | 2 |
| CData | 2 |
| CDSect | 2 |
| CDEnd | 2 |
| CharRef | 3 |
| ScalaPatterns | 4 |
| Patterns | 4 |
| ContentP | 7 |
| ETagP | 7 |
| XmlPattern | 7 |
| ElemPattern | 7 |
| TagPHeader | 7 |
| STagPEnd | 7 |
| EntityRef | 24 |
| Reference | 25 |
| OctalEscape | 73 |
| ClsAnnot | 89 |
| DoWhile | 109 |
do |
109 |
<% |
130 |
| CharA | 160 |
| Assign | 168 |
| ClassQualifier | 171 |
| ImplicitLambda | 179 |
| Digit | 189 |
| " | " |
| PkgObj | 312 |
| Implicit | 316 |
| EmptyElemTagEnd | 378 |
| EarlyDefTmpl | 385 |
forSome |
392 |
| ExistentialClause | 392 |
| PkgBlock | 399 |
← |
432 |
# |
806 |
macro |
807 |
| XmlExpr | 1099 |
finally |
1129 |
| Finally | 1130 |
| SelfType | 1243 |
sealed |
1597 |
>: |
1620 |
| Refinement | 1629 |
| Return | 1639 |
return |
1640 |
| ScalaExpr | 1715 |
| PostFix | 1754 |
yield |
1774 |
| Binding | 1810 |
| UnicodeEscape | 1881 |
| FloatType | 1890 |
| "*" | 1908 |
| Exp | 1909 |
| Symbol | 1945 |
| Eq | 1963 |
| Attribute | 1964 |
| AttValue | 1964 |
| _* | 2067 |
| Enumerator | 2370 |
| Content | 2396 |
| ETag | 2396 |
| STagEnd | 2397 |
| { | 2419 |
super |
2547 |
| XmlContent | 2634 |
| Content1 | 2744 |
abstract |
2769 |
| Element | 2774 |
| TagHeader | 2775 |
| Catch | 2799 |
catch |
2799 |
| CharData | 3075 |
| HexNum | 3207 |
| BacktickId | 3233 |
| While | 3549 |
while |
3657 |
| ThisPath | 3713 |
| ThisSuper | 3714 |
| Try | 3782 |
try |
3782 |
| Guard | 4210 |
lazy |
4585 |
| TripleTail | 4616 |
| TripleChars | 4616 |
throw |
4963 |
| Throw | 4963 |
protected |
5736 |
| Enumerators | 5935 |
| For | 5935 |
for |
5936 |
| TypeDef | 6196 |
<: |
6568 |
⇒ |
6677 |
| ClsArgMod | 6797 |
| PatLiteral | 7126 |
| Name | 7169 |
| BaseChar | 7170 |
| XNameStart | 7170 |
| HexDigit | 7521 |
<- |
7565 |
| Generator | 7998 |
final |
8851 |
| PlainIdNoDollar | 9224 |
| TQ | 9231 |
| Selectors | 9559 |
| EscapedChars | 9771 |
| TopPkgSeq | 9842 |
| AccessQualifier | 10200 |
with |
10811 |
| AscriptionType | 10969 |
type |
11060 |
| TypePattern | 11661 |
| TypePat | 11681 |
| TraitDef | 11894 |
trait |
11896 |
| TypeArgList | 12882 |
| Ascription | 12988 |
| QualId | 13092 |
| Annot | 13194 |
| CharQ | 13375 |
match |
13379 |
package |
13574 |
var |
13900 |
| CompilationUnit | 15064 |
@ |
15097 |
| TopStatSeq | 15434 |
| AllArgs | 16338 |
| Thingy | 16563 |
| ClsArgs | 16609 |
| ExprPrefix | 18739 |
| ObjDef | 19601 |
object |
19615 |
this |
19755 |
| Variant | 19860 |
| NameStartChar | 20087 |
implicit |
20323 |
| NameChar | 20354 |
| FunTypeArgs | 20711 |
override |
21124 |
else |
21729 |
| Else | 21730 |
| Selector | 23101 |
| Bool | 23596 |
| Thing | 24398 |
| CaseClauses | 24502 |
private |
24904 |
| Thing2 | 26236 |
| Float | 26332 |
| MatchAscriptionSuffix | 26371 |
| LambdaRhs | 26849 |
| ClsDef | 27830 |
class |
27885 |
| LocalMod | 27970 |
| AccessMod | 30636 |
| ClsArg | 30743 |
extends |
33124 |
| LetterDigitDollarUnderscore | 33174 |
| If | 33797 |
| TupleEx | 36982 |
| ExtractorArgs | 36986 |
if |
37993 |
| ParenedLambda | 39642 |
| TmplBody | 49989 |
| Char1 | 51177 |
| DefTmpl | 51319 |
| New | 53019 |
new |
53026 |
| Import | 54099 |
import |
54100 |
| ImportExpr | 54280 |
| CtxBounds | 55627 |
| TypeArg | 55634 |
| Parened | 56529 |
| Char | 57771 |
| CaseClause | 59454 |
| Mod | 79023 |
| TopStat | 83166 |
| NamedTmpl | 85746 |
| Constrs | 85747 |
| AnonTmpl | 86155 |
| Constr | 94889 |
| Args | 97834 |
=> |
99875 |
| FunArgs | 114242 |
| BlockExpr | 119049 |
_ |
121207 |
| Pattern | 123107 |
| TypeOrBindPattern | 131584 |
val |
139110 |
| ValVarDef | 146190 |
| FunArg | 146440 |
| Tmpl | 148466 |
| FunSig | 148928 |
| FunDef | 149123 |
def |
149142 |
| Int | 154846 |
| } | 171254 |
| SingleChars | 171605 |
| String | 176462 |
case |
177082 |
| "}" | 183623 |
| BlockEnd | 184599 |
| Block | 184996 |
| TypeArgs | 190898 |
| "{" | 202803 |
| OpChar | 203886 |
| Types | 205562 |
| Operator | 219160 |
| InfixSuffix | 228631 |
| "[" | 234697 |
| "]" | 234701 |
| Extractor | 238699 |
| TmplStat | 240386 |
| VarId | 255910 |
| InfixPattern | 266774 |
| BindPattern | 266951 |
| SimplePattern | 272459 |
| Dcl | 301426 |
= |
319508 |
| BlockDef | 321937 |
: |
323664 |
| Body | 343983 |
| DecNum | 358460 |
| ExprLiteral | 393978 |
| Literal | 400798 |
| MultilineComment | 417655 |
| SameLineCharChunks | 422960 |
| LineComment | 428650 |
| BlockStat | 434312 |
| "." | 487694 |
| "," | 497062 |
| PostDotCheck | 527584 |
| ArgList | 532846 |
| ParenArgList | 542139 |
| Exprs | 553102 |
| PostfixType | 607743 |
| InfixType | 608010 |
| Type | 612167 |
| Unbounded | 615180 |
| CompoundType | 628819 |
| Letter | 648719 |
| TypeBounds | 670383 |
| AnnotType | 723032 |
| SimpleType | 737524 |
| BasicType | 738579 |
| O | 779453 |
| ")" | 827263 |
| "(" | 828441 |
| Comment | 845933 |
| Prelude | 875773 |
| W | 1076937 |
| Semis | 1132011 |
| Path | 1204887 |
| AlphabetKeywords | 1248607 |
| SymbolicKeywords | 1484209 |
| PostfixLambda | 1538313 |
| PostfixExpr | 1545698 |
| PostfixSuffix | 1566877 |
| SmallerExprOrLambda | 1579317 |
| Expr | 1627600 |
| SimpleExpr | 1767224 |
| PrefixExpr | 1771497 |
| ExprSuffix | 1799842 |
| Upper | 1938985 |
| IdPath | 2189408 |
| StableId | 2195822 |
| OneNLMax | 2345703 |
| ConsumeComments | 2353451 |
| Semi | 2530044 |
| CommentChunk | 2646017 |
| Keywords | 2716775 |
| NotNewline | 5355498 |
| VarId0 | 5860421 |
| Lower | 5890725 |
| IdUnderscoreChunk | 6689840 |
| IdRest | 7467894 |
| PlainId | 7710709 |
| WS | 12040535 |
| Newline | 12456005 |
| Id | 12580572 |
| WSChars | 42329645 |
| WL | 62297135 |
Interesting! I don't know what half the things actually represent, but I'd be intrigued to see a list of the ratio of features used by each library as a proportion of these totals, i.e. for each library list the features they use significantly more/less than average. @jrudolph did some similar research for a talk at Scala Days 2014.