Skip to content

Commit

Permalink
added support for --excl-ext flag
Browse files Browse the repository at this point in the history
  • Loading branch information
mainak55512 committed Oct 19, 2024
1 parent a86fb34 commit 0c4813f
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 55 deletions.
6 changes: 3 additions & 3 deletions process/process_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ func ProcessByFlags(count_details *[]utils.OutputStructure, file_details *[]util
if *inpFlags.Sort == true {
utils.SortResult(count_details)
}
jsonOutput, err := utils.EmitJSON(inpFlags.Lang, count_details)
jsonOutput, err := utils.EmitJSON(inpFlags.Lang, inpFlags.NLang, count_details)
if err != nil {
fmt.Println(fmt.Errorf("%w", err))
}
Expand All @@ -68,7 +68,7 @@ func ProcessByFlags(count_details *[]utils.OutputStructure, file_details *[]util
if *inpFlags.Sort == true {
utils.SortResult(count_details)
}
yamlOutput, err := utils.EmitYAML(inpFlags.Lang, count_details)
yamlOutput, err := utils.EmitYAML(inpFlags.Lang, inpFlags.NLang, count_details)
if err != nil {
fmt.Println(fmt.Errorf("%w", err))
}
Expand All @@ -81,7 +81,7 @@ func ProcessByFlags(count_details *[]utils.OutputStructure, file_details *[]util
if *inpFlags.Sort == true {
utils.SortResult(count_details)
}
err = utils.EmitTable(inpFlags.Lang, count_details, &total_counts, folder_name, is_git_initialized, folder_count)
err = utils.EmitTable(inpFlags.Lang, inpFlags.NLang, count_details, &total_counts, folder_name, is_git_initialized, folder_count)
if err != nil {
fmt.Println(fmt.Errorf("%w", err))
}
Expand Down
45 changes: 37 additions & 8 deletions utils/emit_output_json.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,57 @@ package utils
import (
"encoding/json"
"fmt"
"slices"
"strings"
)

func EmitJSON(
lang *string,
nlang *string,
// file_details *[]File_details,
count_details *[]OutputStructure,
) (string, error) {
// var count_details []OutputStructure
if *lang != "none" {
var valid_ext bool = false
ext_list := strings.Split(*lang, ",")
var temp_item_list []OutputStructure
for i := range ext_list {
ext_list[i] = strings.TrimSpace(ext_list[i])
}
for _, item := range *count_details {
// checks if extension provided
// through --ext flag is present in file_details array
if slices.Contains(ext_list, item.Ext) {
valid_ext = true
temp_item_list = append(temp_item_list, item)
}
}
if valid_ext == false {
return "", fmt.Errorf(
"No file with extension(s) '%s' "+
"exists in this directory",
*lang,
)
}
jsonOutput, err := json.MarshalIndent(temp_item_list, "", " ")
return string(jsonOutput), err
}
if *nlang != "none" {
n_ext_list := strings.Split(*nlang, ",")
var temp_item_list []OutputStructure
for i := range n_ext_list {
n_ext_list[i] = strings.TrimSpace(n_ext_list[i])
}
for _, item := range *count_details {
// checks if extension provided
// through --ext flag is present in file_details array
if item.Ext == *lang {
jsonOutput, err := json.MarshalIndent([]OutputStructure{item}, "", " ")
return string(jsonOutput), err
if !slices.Contains(n_ext_list, item.Ext) {
temp_item_list = append(temp_item_list, item)
}
}
return "", fmt.Errorf(
"No file with extension '%s' "+
"exists in this directory",
*lang,
)
jsonOutput, err := json.MarshalIndent(temp_item_list, "", " ")
return string(jsonOutput), err
}
jsonOutput, err := json.MarshalIndent(count_details, "", " ")
return string(jsonOutput), err
Expand Down
58 changes: 36 additions & 22 deletions utils/emit_output_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@ import (
"fmt"
"os"
"path"
"slices"
"strings"

"github.com/olekukonko/tablewriter"
)

func EmitTable(
lang *string,
nlang *string,
count_details *[]OutputStructure,
// file_details *[]File_details,
total_counts *TotalCount,
Expand All @@ -29,26 +32,36 @@ func EmitTable(
})
table.SetFooterAlignment(2)

// total_files,
// total_lines,
// total_gaps,
// total_comments,
// total_code := GetTotalCounts(file_details)

// if not extension is provided via --ext flag
if *lang == "none" {

for _, item := range *count_details {
// percent := float32(item.Line_count) / float32(total_lines) * 100
table.Append([]string{
item.Ext,
fmt.Sprint(item.File_count),
fmt.Sprint(item.Line_count),
fmt.Sprint(item.Gap),
fmt.Sprint(item.Comments),
fmt.Sprint(item.Code),
fmt.Sprintf("%.2f", item.Code_percent),
})
if *nlang != "none" {
n_ext_list := strings.Split(*nlang, ",")
for i := range n_ext_list {
n_ext_list[i] = strings.TrimSpace(n_ext_list[i])
}
if !slices.Contains(n_ext_list, item.Ext) {
table.Append([]string{
item.Ext,
fmt.Sprint(item.File_count),
fmt.Sprint(item.Line_count),
fmt.Sprint(item.Gap),
fmt.Sprint(item.Comments),
fmt.Sprint(item.Code),
fmt.Sprintf("%.2f", item.Code_percent),
})
}
} else {
table.Append([]string{
item.Ext,
fmt.Sprint(item.File_count),
fmt.Sprint(item.Line_count),
fmt.Sprint(item.Gap),
fmt.Sprint(item.Comments),
fmt.Sprint(item.Code),
fmt.Sprintf("%.2f", item.Code_percent),
})
}
}

table.SetFooter([]string{
Expand All @@ -73,8 +86,6 @@ func EmitTable(
table.Render()

if e != nil {
// fmt.Println(e)
// os.Exit(1)
return e
}
return nil
Expand All @@ -84,13 +95,16 @@ func EmitTable(
// will be set to true if atleast one file
// with provided extension via --ext flag is present
var valid_ext bool = false
ext_list := strings.Split(*lang, ",")
for i := range ext_list {
ext_list[i] = strings.TrimSpace(ext_list[i])
}
for _, item := range *count_details {

// checks if extension provided
// through --ext flag is present in file_details array
if item.Ext == *lang {
if slices.Contains(ext_list, item.Ext) {

// percent := float32(item.Line_count) / float32(to) * 100
// found valid extension hence setting as true
valid_ext = true
table.Append([]string{
Expand All @@ -102,7 +116,7 @@ func EmitTable(
fmt.Sprint(item.Code),
fmt.Sprintf("%.2f", item.Code_percent),
})
break
// break
}
}

Expand Down
46 changes: 37 additions & 9 deletions utils/emit_output_yaml.go
Original file line number Diff line number Diff line change
@@ -1,30 +1,58 @@
package utils

import (
// "encoding/json"
"fmt"
"gopkg.in/yaml.v3"
"slices"
"strings"
)

func EmitYAML(
lang *string,
nlang *string,
// file_details *[]File_details,
count_details *[]OutputStructure,
) (string, error) {
if *lang != "none" {
var valid_ext bool = false
ext_list := strings.Split(*lang, ",")
var temp_item_list []OutputStructure
for i := range ext_list {
ext_list[i] = strings.TrimSpace(ext_list[i])
}
for _, item := range *count_details {
// checks if extension provided
// through --ext flag is present in file_details array
if slices.Contains(ext_list, item.Ext) {
valid_ext = true
temp_item_list = append(temp_item_list, item)
}
}
if valid_ext == false {
return "", fmt.Errorf(
"No file with extension(s) '%s' "+
"exists in this directory",
*lang,
)
}
yamlOutput, err := yaml.Marshal(temp_item_list)
return string(yamlOutput), err
}
if *nlang != "none" {
n_ext_list := strings.Split(*nlang, ",")
var temp_item_list []OutputStructure
for i := range n_ext_list {
n_ext_list[i] = strings.TrimSpace(n_ext_list[i])
}
for _, item := range *count_details {
// checks if extension provided
// through --ext flag is present in file_details array
if item.Ext == *lang {
yamlOutput, err := yaml.Marshal([]OutputStructure{item})
return string(yamlOutput), err
if !slices.Contains(n_ext_list, item.Ext) {
temp_item_list = append(temp_item_list, item)
}
}
return "", fmt.Errorf(
"No file with extension '%s' "+
"exists in this directory",
*lang,
)
yamlOutput, err := yaml.Marshal(temp_item_list)
return string(yamlOutput), err
}
yamlOutput, err := yaml.Marshal(*count_details)
return string(yamlOutput), err
Expand Down
23 changes: 13 additions & 10 deletions utils/handle_cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@ import (
)

type FlagOptions struct {
Lang *string
Help *bool
JSON *bool
YAML *bool
Sort *bool
Lang *string
NLang *string
Help *bool
JSON *bool
YAML *bool
Sort *bool
}

func HandleFlags(folder_name *string) FlagOptions {
// flag --ext
var lang = flag.String("ext", "none", "Filter based on extention")
var nlang = flag.String("excl-ext", "none", "Exclude files with certain extention")
var help = flag.Bool("help", false, "Shows help text")
var json = flag.Bool("json", false, "Get output in json format")
var yaml = flag.Bool("yaml", false, "Get output in yaml format")
Expand All @@ -25,10 +27,11 @@ func HandleFlags(folder_name *string) FlagOptions {
*folder_name = flag.Args()[0]
}
return FlagOptions{
Lang: lang,
Help: help,
JSON: json,
YAML: yaml,
Sort: sort,
Lang: lang,
NLang: nlang,
Help: help,
JSON: json,
YAML: yaml,
Sort: sort,
}
}
7 changes: 4 additions & 3 deletions utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,16 +50,17 @@ This emits help text when --help tag is called
*/
func EmitHelpText() string {

versionDetails := `0.1.8`
versionDetails := `0.1.9`
authorDetails := `mainak55512 (mbhattacharjee432@gmail.com)`
flagDetails := "--help\n--ext [extension name]\n--json\n--yaml\n--sort"
flagDetails := "--help\n--ext [list extension name]\n--excl-ext [list of extension name]\n--json\n--yaml\n--sort"
helpFlagDetails := "--help\tShows the usage details\n\n\tstto --help or,\n\tstto -help\n\n"
extFlagDetails := "--ext\tFilters output based on the given extension\n\n\tstto --ext [extension name] [(optional) folder name] or,\n\tstto -ext [extension name] [(optional) folder name]\n\n"
exclextFlagDetails := "--excl-ext\tFilters out files from output based on the given extension\n\n\tstto --excl-ext [extension name] [(optional) folder name] or,\n\tstto -excl-ext [extension name] [(optional) folder name]\n\n"
jsonFlagDetails := "--json\tEmits output in JSON format\n\n\tstto --json\n\n"
yamlFlagDetails := "--yaml\tEmits output in YAML format\n\n\tstto --yaml\n\n"
sortFlagDetails := "--sort\tSorts output based on descending line count\n\n\tstto --sort\n\n"
generalUsageDetails := "\n\n[General usage]:\n\tstto or,\n\tstto [folder name]"
returnText := "\nSTTO: a simple and quick line of code counter.\nAuthor: " + authorDetails + "\nVersion: " + versionDetails + generalUsageDetails + "\n\n[Flags]:\n" + flagDetails + "\n[Usage]:\n" + helpFlagDetails + extFlagDetails + jsonFlagDetails + yamlFlagDetails + sortFlagDetails
returnText := "\nSTTO: a simple and quick line of code counter.\nAuthor: " + authorDetails + "\nVersion: " + versionDetails + generalUsageDetails + "\n\n[Flags]:\n" + flagDetails + "\n[Usage]:\n" + helpFlagDetails + extFlagDetails + exclextFlagDetails + jsonFlagDetails + yamlFlagDetails + sortFlagDetails

return returnText
}
Expand Down

0 comments on commit 0c4813f

Please sign in to comment.