gofor

command module
v0.0.0-...-9b7cfff Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 24, 2014 License: MIT Imports: 7 Imported by: 0

README

gofor

Because who can resist a good homonym?

What is it?

gofor analyzes the types of for loops encountered in Go code. It is geared towards detecting counting loops -- loops of the form for i := min; i < max; i += stride -- and its categorizations are mostly steps on the way to ruling out non-counting loops and then detecting interesting types of counting loops -- special values for min and stride (0 and 1 respectively) and literal vs non-literal min/max/stride.

It is intended to be used in conjunction with sort and uniq.

Running this on all the packages that were go gettable from http://godoc.org/-/index as of Sep 25, 2013, yielded the following counts. (Results accounting for > 1% are annotated for clarity. Beyond that, use the source, Luke.)

101238 range: for ?? := range ?? {
31705 counting loop min 0, max non-literal, stride 1: for i := 0; i < ??; i++ {
14508 bare for: for {
12814 cond only: for ?? {
7235 cond not < or <=: for ??; not LT[E]; ?? {
5472 counting loop min 0, max literal, stride 1: for i := 0; i < N; i++ {
4616 counting loop min non-literal, max non-literal, stride 1: for i := ??; i < ??; i++ {
1728 missing init
1535 counting loop min literal, max non-literal, stride 1
1508 missing post
 908 counting loop min literal, max literal, stride 1
 671 counting loop min non-literal, max literal, stride 1
 605 init multiple values
 554 counting loop min 0, max non-literal, stride literal
 236 cond lhs not identifier
 236 counting loop min 0, max non-literal, stride non-literal
 227 post assign not += or -= (but might be i = i - 1, oh well)
 191 counting loop min 0, max literal, stride literal
 162 counting loop min non-literal, max non-literal, stride non-literal
 103 counting loop min non-literal, max non-literal, stride literal
  89 counting loop min literal, max literal, stride literal
  78 counting loop min literal, max non-literal, stride literal
  76 init lhs != cond lhs
  59 counting loop min non-literal, max literal, stride literal
  26 post assign multiple values
  19 counting loop min literal, max non-literal, stride non-literal
  17 init not i := n
  15 counting loop min literal, max literal, stride non-literal
  13 init lhs != post incdec lhs
   6 counting loop min 0, max literal, stride non-literal
   4 counting loop min non-literal, max literal, stride non-literal
   3 init lhs != post assign lhs

Acknowledgements

  • Thanks to godoc.org for providing a lovely index for scraping bunches of Go.
  • Thanks for @kr for github.com/kr/fs, vendored here.
  • Thanks to Brad Fitzpatrick for encouraging me to gather this data.

Documentation

Overview

gofor analyzes the types of for loops encountered in Go code. It is geared towards detecting counting loops -- loops of the form

for i := min; i < max; i += stride

and its categorizations are mostly steps on the way to ruling out non-counting loops and then detecting interesting types of counting loops -- special values for min and stride (0 and 1 respectively) and literal vs non-literal min/max/stride.

It is intended to be used in conjunction with sort and uniq.

Directories

Path Synopsis
github.com
kr/fs
Package fs provides filesystem-related functions.
Package fs provides filesystem-related functions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL