Skip to content

Commit 0c4813f

Browse files
committed
added support for --excl-ext flag
1 parent a86fb34 commit 0c4813f

File tree

6 files changed

+130
-55
lines changed

6 files changed

+130
-55
lines changed

process/process_flags.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func ProcessByFlags(count_details *[]utils.OutputStructure, file_details *[]util
5555
if *inpFlags.Sort == true {
5656
utils.SortResult(count_details)
5757
}
58-
jsonOutput, err := utils.EmitJSON(inpFlags.Lang, count_details)
58+
jsonOutput, err := utils.EmitJSON(inpFlags.Lang, inpFlags.NLang, count_details)
5959
if err != nil {
6060
fmt.Println(fmt.Errorf("%w", err))
6161
}
@@ -68,7 +68,7 @@ func ProcessByFlags(count_details *[]utils.OutputStructure, file_details *[]util
6868
if *inpFlags.Sort == true {
6969
utils.SortResult(count_details)
7070
}
71-
yamlOutput, err := utils.EmitYAML(inpFlags.Lang, count_details)
71+
yamlOutput, err := utils.EmitYAML(inpFlags.Lang, inpFlags.NLang, count_details)
7272
if err != nil {
7373
fmt.Println(fmt.Errorf("%w", err))
7474
}
@@ -81,7 +81,7 @@ func ProcessByFlags(count_details *[]utils.OutputStructure, file_details *[]util
8181
if *inpFlags.Sort == true {
8282
utils.SortResult(count_details)
8383
}
84-
err = utils.EmitTable(inpFlags.Lang, count_details, &total_counts, folder_name, is_git_initialized, folder_count)
84+
err = utils.EmitTable(inpFlags.Lang, inpFlags.NLang, count_details, &total_counts, folder_name, is_git_initialized, folder_count)
8585
if err != nil {
8686
fmt.Println(fmt.Errorf("%w", err))
8787
}

utils/emit_output_json.go

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,57 @@ package utils
33
import (
44
"encoding/json"
55
"fmt"
6+
"slices"
7+
"strings"
68
)
79

810
func EmitJSON(
911
lang *string,
12+
nlang *string,
1013
// file_details *[]File_details,
1114
count_details *[]OutputStructure,
1215
) (string, error) {
1316
// var count_details []OutputStructure
1417
if *lang != "none" {
18+
var valid_ext bool = false
19+
ext_list := strings.Split(*lang, ",")
20+
var temp_item_list []OutputStructure
21+
for i := range ext_list {
22+
ext_list[i] = strings.TrimSpace(ext_list[i])
23+
}
24+
for _, item := range *count_details {
25+
// checks if extension provided
26+
// through --ext flag is present in file_details array
27+
if slices.Contains(ext_list, item.Ext) {
28+
valid_ext = true
29+
temp_item_list = append(temp_item_list, item)
30+
}
31+
}
32+
if valid_ext == false {
33+
return "", fmt.Errorf(
34+
"No file with extension(s) '%s' "+
35+
"exists in this directory",
36+
*lang,
37+
)
38+
}
39+
jsonOutput, err := json.MarshalIndent(temp_item_list, "", " ")
40+
return string(jsonOutput), err
41+
}
42+
if *nlang != "none" {
43+
n_ext_list := strings.Split(*nlang, ",")
44+
var temp_item_list []OutputStructure
45+
for i := range n_ext_list {
46+
n_ext_list[i] = strings.TrimSpace(n_ext_list[i])
47+
}
1548
for _, item := range *count_details {
1649
// checks if extension provided
1750
// through --ext flag is present in file_details array
18-
if item.Ext == *lang {
19-
jsonOutput, err := json.MarshalIndent([]OutputStructure{item}, "", " ")
20-
return string(jsonOutput), err
51+
if !slices.Contains(n_ext_list, item.Ext) {
52+
temp_item_list = append(temp_item_list, item)
2153
}
2254
}
23-
return "", fmt.Errorf(
24-
"No file with extension '%s' "+
25-
"exists in this directory",
26-
*lang,
27-
)
55+
jsonOutput, err := json.MarshalIndent(temp_item_list, "", " ")
56+
return string(jsonOutput), err
2857
}
2958
jsonOutput, err := json.MarshalIndent(count_details, "", " ")
3059
return string(jsonOutput), err

utils/emit_output_table.go

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import (
44
"fmt"
55
"os"
66
"path"
7+
"slices"
8+
"strings"
79

810
"github.com/olekukonko/tablewriter"
911
)
1012

1113
func EmitTable(
1214
lang *string,
15+
nlang *string,
1316
count_details *[]OutputStructure,
1417
// file_details *[]File_details,
1518
total_counts *TotalCount,
@@ -29,26 +32,36 @@ func EmitTable(
2932
})
3033
table.SetFooterAlignment(2)
3134

32-
// total_files,
33-
// total_lines,
34-
// total_gaps,
35-
// total_comments,
36-
// total_code := GetTotalCounts(file_details)
37-
3835
// if not extension is provided via --ext flag
3936
if *lang == "none" {
40-
4137
for _, item := range *count_details {
42-
// percent := float32(item.Line_count) / float32(total_lines) * 100
43-
table.Append([]string{
44-
item.Ext,
45-
fmt.Sprint(item.File_count),
46-
fmt.Sprint(item.Line_count),
47-
fmt.Sprint(item.Gap),
48-
fmt.Sprint(item.Comments),
49-
fmt.Sprint(item.Code),
50-
fmt.Sprintf("%.2f", item.Code_percent),
51-
})
38+
if *nlang != "none" {
39+
n_ext_list := strings.Split(*nlang, ",")
40+
for i := range n_ext_list {
41+
n_ext_list[i] = strings.TrimSpace(n_ext_list[i])
42+
}
43+
if !slices.Contains(n_ext_list, item.Ext) {
44+
table.Append([]string{
45+
item.Ext,
46+
fmt.Sprint(item.File_count),
47+
fmt.Sprint(item.Line_count),
48+
fmt.Sprint(item.Gap),
49+
fmt.Sprint(item.Comments),
50+
fmt.Sprint(item.Code),
51+
fmt.Sprintf("%.2f", item.Code_percent),
52+
})
53+
}
54+
} else {
55+
table.Append([]string{
56+
item.Ext,
57+
fmt.Sprint(item.File_count),
58+
fmt.Sprint(item.Line_count),
59+
fmt.Sprint(item.Gap),
60+
fmt.Sprint(item.Comments),
61+
fmt.Sprint(item.Code),
62+
fmt.Sprintf("%.2f", item.Code_percent),
63+
})
64+
}
5265
}
5366

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

7588
if e != nil {
76-
// fmt.Println(e)
77-
// os.Exit(1)
7889
return e
7990
}
8091
return nil
@@ -84,13 +95,16 @@ func EmitTable(
8495
// will be set to true if atleast one file
8596
// with provided extension via --ext flag is present
8697
var valid_ext bool = false
98+
ext_list := strings.Split(*lang, ",")
99+
for i := range ext_list {
100+
ext_list[i] = strings.TrimSpace(ext_list[i])
101+
}
87102
for _, item := range *count_details {
88103

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

93-
// percent := float32(item.Line_count) / float32(to) * 100
94108
// found valid extension hence setting as true
95109
valid_ext = true
96110
table.Append([]string{
@@ -102,7 +116,7 @@ func EmitTable(
102116
fmt.Sprint(item.Code),
103117
fmt.Sprintf("%.2f", item.Code_percent),
104118
})
105-
break
119+
// break
106120
}
107121
}
108122

utils/emit_output_yaml.go

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,58 @@
11
package utils
22

33
import (
4-
// "encoding/json"
54
"fmt"
65
"gopkg.in/yaml.v3"
6+
"slices"
7+
"strings"
78
)
89

910
func EmitYAML(
1011
lang *string,
12+
nlang *string,
1113
// file_details *[]File_details,
1214
count_details *[]OutputStructure,
1315
) (string, error) {
1416
if *lang != "none" {
17+
var valid_ext bool = false
18+
ext_list := strings.Split(*lang, ",")
19+
var temp_item_list []OutputStructure
20+
for i := range ext_list {
21+
ext_list[i] = strings.TrimSpace(ext_list[i])
22+
}
23+
for _, item := range *count_details {
24+
// checks if extension provided
25+
// through --ext flag is present in file_details array
26+
if slices.Contains(ext_list, item.Ext) {
27+
valid_ext = true
28+
temp_item_list = append(temp_item_list, item)
29+
}
30+
}
31+
if valid_ext == false {
32+
return "", fmt.Errorf(
33+
"No file with extension(s) '%s' "+
34+
"exists in this directory",
35+
*lang,
36+
)
37+
}
38+
yamlOutput, err := yaml.Marshal(temp_item_list)
39+
return string(yamlOutput), err
40+
}
41+
if *nlang != "none" {
42+
n_ext_list := strings.Split(*nlang, ",")
43+
var temp_item_list []OutputStructure
44+
for i := range n_ext_list {
45+
n_ext_list[i] = strings.TrimSpace(n_ext_list[i])
46+
}
1547
for _, item := range *count_details {
1648
// checks if extension provided
1749
// through --ext flag is present in file_details array
18-
if item.Ext == *lang {
19-
yamlOutput, err := yaml.Marshal([]OutputStructure{item})
20-
return string(yamlOutput), err
50+
if !slices.Contains(n_ext_list, item.Ext) {
51+
temp_item_list = append(temp_item_list, item)
2152
}
2253
}
23-
return "", fmt.Errorf(
24-
"No file with extension '%s' "+
25-
"exists in this directory",
26-
*lang,
27-
)
54+
yamlOutput, err := yaml.Marshal(temp_item_list)
55+
return string(yamlOutput), err
2856
}
2957
yamlOutput, err := yaml.Marshal(*count_details)
3058
return string(yamlOutput), err

utils/handle_cmd.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ import (
55
)
66

77
type FlagOptions struct {
8-
Lang *string
9-
Help *bool
10-
JSON *bool
11-
YAML *bool
12-
Sort *bool
8+
Lang *string
9+
NLang *string
10+
Help *bool
11+
JSON *bool
12+
YAML *bool
13+
Sort *bool
1314
}
1415

1516
func HandleFlags(folder_name *string) FlagOptions {
1617
// flag --ext
1718
var lang = flag.String("ext", "none", "Filter based on extention")
19+
var nlang = flag.String("excl-ext", "none", "Exclude files with certain extention")
1820
var help = flag.Bool("help", false, "Shows help text")
1921
var json = flag.Bool("json", false, "Get output in json format")
2022
var yaml = flag.Bool("yaml", false, "Get output in yaml format")
@@ -25,10 +27,11 @@ func HandleFlags(folder_name *string) FlagOptions {
2527
*folder_name = flag.Args()[0]
2628
}
2729
return FlagOptions{
28-
Lang: lang,
29-
Help: help,
30-
JSON: json,
31-
YAML: yaml,
32-
Sort: sort,
30+
Lang: lang,
31+
NLang: nlang,
32+
Help: help,
33+
JSON: json,
34+
YAML: yaml,
35+
Sort: sort,
3336
}
3437
}

utils/utils.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,17 @@ This emits help text when --help tag is called
5050
*/
5151
func EmitHelpText() string {
5252

53-
versionDetails := `0.1.8`
53+
versionDetails := `0.1.9`
5454
authorDetails := `mainak55512 (mbhattacharjee432@gmail.com)`
55-
flagDetails := "--help\n--ext [extension name]\n--json\n--yaml\n--sort"
55+
flagDetails := "--help\n--ext [list extension name]\n--excl-ext [list of extension name]\n--json\n--yaml\n--sort"
5656
helpFlagDetails := "--help\tShows the usage details\n\n\tstto --help or,\n\tstto -help\n\n"
5757
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"
58+
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"
5859
jsonFlagDetails := "--json\tEmits output in JSON format\n\n\tstto --json\n\n"
5960
yamlFlagDetails := "--yaml\tEmits output in YAML format\n\n\tstto --yaml\n\n"
6061
sortFlagDetails := "--sort\tSorts output based on descending line count\n\n\tstto --sort\n\n"
6162
generalUsageDetails := "\n\n[General usage]:\n\tstto or,\n\tstto [folder name]"
62-
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
63+
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
6364

6465
return returnText
6566
}

0 commit comments

Comments
 (0)