Skip to content

Commit 5cf7318

Browse files
committed
Determine relative paths using absolute paths
In some cases it was impossible to determine the relative paths between two directories if those directories were not absolute paths.
1 parent c4febc3 commit 5cf7318

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"fmt"
77
"io"
88
"os"
9-
"path"
109
"path/filepath"
1110
"sort"
1211
"strings"
@@ -146,9 +145,20 @@ func main() {
146145
os.Exit(1)
147146
}
148147

148+
var basedir string
149+
if relative {
150+
basedir, err = filepath.Abs(filepath.Dir(outputFile))
151+
if err != nil {
152+
if !silent {
153+
fmt.Fprintf(os.Stderr, "could not determine absolute path: %s\n", err)
154+
}
155+
os.Exit(1)
156+
}
157+
}
158+
149159
tags := []Tag{}
150160
for _, file := range files {
151-
ts, err := Parse(file, relative, path.Dir(outputFile))
161+
ts, err := Parse(file, relative, basedir)
152162
if err != nil {
153163
if !silent {
154164
fmt.Fprintf(os.Stderr, "parse error: %s\n\n", err)

parser.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,9 @@ func (p *tagParser) parseInterfaceMethods(name string, s *ast.InterfaceType) {
208208
func (p *tagParser) createTag(name string, pos token.Pos, tagType TagType) Tag {
209209
f := p.fset.File(pos).Name()
210210
if p.relative {
211-
if rel, err := filepath.Rel(p.basepath, f); err != nil {
212-
// log error, but continue
211+
if abs, err := filepath.Abs(f); err != nil {
212+
fmt.Fprintf(os.Stderr, "could not determine absolute path: %s\n", err)
213+
} else if rel, err := filepath.Rel(p.basepath, abs); err != nil {
213214
fmt.Fprintf(os.Stderr, "could not determine relative path: %s\n", err)
214215
} else {
215216
f = rel

parser_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"path/filepath"
45
"strconv"
56
"testing"
67
)
@@ -91,7 +92,13 @@ var testCases = []struct {
9192

9293
func TestParse(t *testing.T) {
9394
for _, testCase := range testCases {
94-
tags, err := Parse(testCase.filename, testCase.relative, testCase.basepath)
95+
basepath, err := filepath.Abs(testCase.basepath)
96+
if err != nil {
97+
t.Errorf("[%s] could not determine base path: %s\n", testCase.filename, err)
98+
continue
99+
}
100+
101+
tags, err := Parse(testCase.filename, testCase.relative, basepath)
95102
if err != nil {
96103
t.Errorf("[%s] Parse error: %s", testCase.filename, err)
97104
continue

0 commit comments

Comments
 (0)