9

私のF#コードに関するいくつかの素晴らしい統計を取得するにはどうすればよいですか?

私は次のようなことを想像することができました

  • コードの行数
  • ファイル数
  • 文字数?
  • 関数、クラス、モジュールなどの数
4

3 に答える 3

10

いくつかの単純なシェルユーティリティを使用してみませんか?

順番に答える

wc -l *.fs
ls -l *.fs | wc -l
wc -c *.fs
grep module *.fs | wc -l
grep type *.fs | wc -l
grep "^let\|member" *.fs | wc -l

更新:再帰フォルダーのいくつかの例-パターンが明白であることを願っています

wc -l `find . -name "*.fs" `
find . -name "*.fs" | wc -l
wc -c `find . -name "*.fs" `
grep module `find . -name "*.fs" ` | wc -l
于 2012-05-02T06:21:14.403 に答える
4

fsこれは、両方とファイルを再帰的にカウントするF#バージョンfsxです(F#ランタイムがインストールされていると仮定します)。

open System.IO
open System.Text.RegularExpressions

let rec allFiles dir =
    seq { yield! Directory.GetFiles dir
          yield! Seq.collect allFiles (Directory.GetDirectories dir) }

let rgType = new Regex(@"type", RegexOptions.Compiled)
let rgModule = new Regex(@"module", RegexOptions.Compiled)
let rgFunction = new Regex(@"^let|member", RegexOptions.Compiled)

let count (rg: Regex) s =
    s |> rg.Matches |> fun x -> x.Count

type Statistics = {
        NumOfLines: int; NumOfFiles: int;
        NumOfChars: int; NumOfTypes: int;
        NumOfModules: int; NumOfFunctions: int;
    } 

let getStats =
    allFiles 
    >> Seq.filter (fun f -> f.EndsWith ".fs" || f.EndsWith ".fsx")
    >> Seq.fold (fun acc f -> 
                    let contents = f |> File.ReadLines
                    { NumOfLines = acc.NumOfLines + Seq.length contents; 
                      NumOfFiles = acc.NumOfFiles + 1;
                      NumOfChars = acc.NumOfChars + Seq.sumBy String.length contents;
                      NumOfTypes = acc.NumOfTypes + Seq.sumBy (count rgType) contents;
                      NumOfModules = acc.NumOfModules + Seq.sumBy (count rgModule) contents;
                      NumOfFunctions = acc.NumOfFunctions + Seq.sumBy (count rgFunction) contents; } 
                        ) { NumOfLines = 0; NumOfFiles = 0; 
                            NumOfChars = 0; NumOfTypes = 0; 
                            NumOfModules = 0; NumOfFunctions = 0 }
于 2012-05-02T07:08:19.237 に答える
-1

F#はILコードと共通型システム(CTS)およびPDBファイルにコンパイルされるため、F#アセンブリはツールNDependで分析でき、コードに関する82のコードメトリック(およびツールの他のすべての機能)を取得できます。無料の試用版はこちらから入手できます。

免責事項、私はNDependチームのメンバーです。

于 2012-05-03T07:33:15.090 に答える