]> Sergey Matveev's repositories - path-extractor.git/commitdiff
First try for linenumbers
authorEdgar HIPP <hipp.edg@gmail.com>
Sun, 30 Aug 2015 15:07:01 +0000 (17:07 +0200)
committerEdgar HIPP <hipp.edg@gmail.com>
Sun, 30 Aug 2015 15:07:01 +0000 (17:07 +0200)
extractor.go
path-extractor/pe.go
pe_test.go

index ac819dc0081fdfe3cd5fb1ac5b7b74c093697930..2a3b2cd5723d89593b5782e6782fa768b495c596 100644 (file)
@@ -1,6 +1,11 @@
 package pathextractor
 
 import "regexp"
+import "fmt"
+
+type MatchOptions struct {
+       format string
+}
 
 func pathExtractor(input string) [][][]byte {
        surroundRegex := "[^][ \\t:'\"]*"
@@ -25,10 +30,11 @@ func postProcess(input string) string {
        return input
 }
 
-func GetAllMatches(input string) []string {
+func GetAllMatches(input string, options MatchOptions) []string {
        matches := [][][]byte{}
        result := []string{}
        s := string("")
+       // print(input)
        matches = pathExtractor(input)
        for _, match := range matches {
                s = string(match[1])
@@ -38,7 +44,11 @@ func GetAllMatches(input string) []string {
                if isGitPath(s) {
                        s = replaceGitPath(s)
                }
-               result = append(result, postProcess(s))
+               s = postProcess(s)
+               if options.format == "ackmate" {
+                       s = fmt.Sprint(s, ":45")
+               }
+               result = append(result, s)
        }
        return result
 }
index d95d456d1478a4326ab44b8b032150f195819380..6bb4fa3e253d48a372ef753352ddfee0655354dd 100644 (file)
@@ -12,7 +12,7 @@ func main() {
        stdin := os.Stdin
        if scanner := bufio.NewScanner(stdin); scanner != nil {
                for scanner.Scan() {
-                       matches := pathextractor.GetAllMatches(scanner.Text())
+                       matches := pathextractor.GetAllMatches(scanner.Text(), pathextractor.MatchOptions{})
                        for _, match := range matches {
                                fmt.Println(match)
                        }
index 6038afe9722e3f1fe3ee805737abed9e83e7e4cd..f560e37249949d7b17c04e94956ae8fd2d317078 100644 (file)
@@ -2,83 +2,83 @@ package pathextractor
 
 import "testing"
 
-func TestGitIgnore(t *testing.T) {
-       output := GetAllMatches("?? alt/generateStore.php")
+func TestEverything(t *testing.T) {
+       output := GetAllMatches("?? alt/generateStore.php", MatchOptions{})
        if output[0] != "alt/generateStore.php" {
                t.Errorf("Doesnt match files", output)
        }
 
-       output = GetAllMatches("I have a cat.")
+       output = GetAllMatches("I have a cat.", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches sentence", output)
        }
 
-       output = GetAllMatches("hello .gitignore")
+       output = GetAllMatches("hello .gitignore", MatchOptions{})
        if output[0] != ".gitignore" {
                t.Errorf("Doesnt match hidden files", output)
        }
 
-       output = GetAllMatches(" this.user ")
+       output = GetAllMatches(" this.user ", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches this.user", output)
        }
 
-       output = GetAllMatches(" mail@mail.com ")
+       output = GetAllMatches(" mail@mail.com ", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches email adresses", output)
        }
 
-       output = GetAllMatches(" logo@2x.png ")
+       output = GetAllMatches(" logo@2x.png ", MatchOptions{})
        if len(output) == 0 {
                t.Errorf("Doesn't match retina asset", output)
        }
 
-       output = GetAllMatches("and/or")
+       output = GetAllMatches("and/or", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches and/or adresses", output)
        }
 
-       output = GetAllMatches("v1.2")
+       output = GetAllMatches("v1.2", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches version number", output)
        }
 
-       output = GetAllMatches("obj.slice()")
+       output = GetAllMatches("obj.slice()", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches function call", output)
        }
 
-       output = GetAllMatches("~/www")
+       output = GetAllMatches("~/www", MatchOptions{})
        if len(output) == 0 || output[0] != "~/www" {
                t.Errorf("Doesnt match home", output)
        }
 
-       output = GetAllMatches("origin/master")
+       output = GetAllMatches("origin/master", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches remote name", output)
        }
 
-       output = GetAllMatches("john doe (dead on 28/04/2014)")
+       output = GetAllMatches("john doe (dead on 28/04/2014)", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches date", output)
        }
 
-       output = GetAllMatches("john doe ,dead on 28/04/2014")
+       output = GetAllMatches("john doe ,dead on 28/04/2014", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Matches date", output)
        }
 
-       output = GetAllMatches(".gitignore , ~/www")
+       output = GetAllMatches(".gitignore , ~/www", MatchOptions{})
        if len(output) != 2 {
                t.Errorf("Doesnt match multi", output)
        }
 
-       output = GetAllMatches("user.test.js")
+       output = GetAllMatches("user.test.js", MatchOptions{})
        if len(output) != 1 {
                t.Errorf("Doesnt match multiple extensions", output)
        }
 
-       output = GetAllMatches("(user.js)")
+       output = GetAllMatches("(user.js)", MatchOptions{})
        if len(output) != 1 {
                t.Errorf("Doesnt match surrounded by parens", output)
        }
@@ -86,13 +86,24 @@ func TestGitIgnore(t *testing.T) {
                t.Errorf("matches surrounded by parens badly", output)
        }
 
-       output = GetAllMatches("var/")
+       output = GetAllMatches("var/", MatchOptions{})
        if len(output) != 1 {
                t.Errorf("Doesnt match dir", output)
        }
 
-       output = GetAllMatches("//")
+       output = GetAllMatches("//", MatchOptions{})
        if len(output) != 0 {
                t.Errorf("Comment matches", output)
        }
+
+       output = GetAllMatches("test.js:45", MatchOptions{format: "ackmate"})
+       if len(output) != 1 {
+               t.Errorf("Ackmate doesnt match", output)
+       }
+       if output[0] == "test.js" {
+               t.Errorf("Ackmate should not forget number", output)
+       }
+       if output[0] != "test.js:45" {
+               t.Errorf("Ackmate should output right line number", output)
+       }
 }