Domanda

Ho scritto un piccolo script per scorrere i file nelle cartelle per contare le righe di codice.

Il cuore dello script è questa funzione per contare le righe di spazi bianchi, commenti e codice. (Nota che per il momento è su misura per C # e non è a conoscenza di commenti su più righe).

Semplicemente non mi sembra molto carino - qualcuno ha una versione più pulita?

// from list of strings return tuple with count of (whitespace, comments, code)
let loc (arr:List<string>) = 
    let innerloc (whitesp, comment, code) (l:string) = 
        let s = l.Trim([|' ';'\t'|]) // remove leading whitespace
        match s with
        | "" -> (whitesp + 1, comment, code)        //blank lines
        | "{" -> (whitesp + 1, comment, code)       //opening blocks
        | "}" -> (whitesp + 1, comment, code)       //closing blocks
        | _ when s.StartsWith("#") -> (whitesp + 1, comment, code)  //regions
        | _ when s.StartsWith("//") -> (whitesp, comment + 1, code) //comments
        | _ -> (whitesp, comment, code + 1)

    List.fold_left innerloc (0,0,0) arr
È stato utile?

Soluzione

Penso che ciò che hai vada bene, ma ecco un po 'di varietà per mescolarlo. (Questa soluzione ripete il problema di ignorare gli spazi bianchi finali.)

type Line =
    | Whitespace = 0
    | Comment = 1
    | Code = 2
let Classify (l:string) =         
    let s = l.TrimStart([|' ';'\t'|])
    match s with        
    | "" | "{" | "}" -> Line.Whitespace
    | _ when s.StartsWith("#") -> Line.Whitespace
    | _ when s.StartsWith("//") -> Line.Comment
    | _ -> Line.Code
let Loc (arr:list<_>) =     
    let sums = Array.create 3 0
    arr 
    |> List.iter (fun line -> 
        let i = Classify line |> int
        sums.[i] <- sums.[i] + 1)
    sums

" adesso " come entità separata potrebbe essere utile in un altro contesto.

Altri suggerimenti

Un sito migliore per questo potrebbe essere refactormycode - è fatto su misura esattamente per queste domande.

Non riesco a vedere molto di sbagliato in questo a parte il fatto che conterai una parentesi graffa con spazi finali come codice anziché spazio bianco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top