File tree 3 files changed +42
-2
lines changed
3 files changed +42
-2
lines changed Original file line number Diff line number Diff line change @@ -15,7 +15,10 @@ import (
15
15
"github.com/elgopher/pi/devtools/internal/lib"
16
16
)
17
17
18
- var NotFound = fmt .Errorf ("no help found" )
18
+ var (
19
+ NotFound = fmt .Errorf ("no help found" )
20
+ NotAvailable = fmt .Errorf ("help for pi module not available outside Go module using Pi" )
21
+ )
19
22
20
23
func PrintHelp (topic string ) error {
21
24
switch topic {
@@ -66,6 +69,9 @@ func goDoc(symbol string) error {
66
69
if err := command .Run (); err != nil {
67
70
var exitErr * exec.ExitError
68
71
if isExitErr := errors .As (err , & exitErr ); isExitErr && exitErr .ExitCode () == 1 {
72
+ if strings .HasPrefix (symbol , "github.com/elgopher/pi" ) && moduleDoesNotHaveDependencyToPi () {
73
+ return NotAvailable
74
+ }
69
75
return NotFound
70
76
}
71
77
@@ -75,6 +81,12 @@ func goDoc(symbol string) error {
75
81
return nil
76
82
}
77
83
84
+ func moduleDoesNotHaveDependencyToPi () bool {
85
+ cmd := exec .Command ("go" , "list" , "-m" , "github.com/elgopher/pi" )
86
+ err := cmd .Run ()
87
+ return err != nil
88
+ }
89
+
78
90
func completeSymbol (symbol string ) string {
79
91
packages := lib .AllPackages ()
80
92
Original file line number Diff line number Diff line change 6
6
package help_test
7
7
8
8
import (
9
+ "os"
9
10
"testing"
10
11
11
12
"github.com/stretchr/testify/assert"
13
+ "github.com/stretchr/testify/require"
12
14
13
15
"github.com/elgopher/pi/devtools/internal/help"
14
16
"github.com/elgopher/pi/devtools/internal/test"
@@ -103,4 +105,25 @@ func TestPrintHelp(t *testing.T) {
103
105
})
104
106
}
105
107
})
108
+
109
+ t .Run ("should return error when help is not available because game was run outside the module using Pi" , func (t * testing.T ) {
110
+ prevWorkDir , err := os .Getwd ()
111
+ require .NoError (t , err )
112
+
113
+ tmpDir , err := os .MkdirTemp ("" , "" )
114
+ require .NoError (t , err )
115
+ defer func () {
116
+ _ = os .RemoveAll (tmpDir )
117
+ }()
118
+
119
+ err = os .Chdir (tmpDir )
120
+ require .NoError (t , err )
121
+ defer func () {
122
+ _ = os .Chdir (prevWorkDir )
123
+ }()
124
+ // when
125
+ err = help .PrintHelp ("pi.Spr" )
126
+ // then
127
+ assert .ErrorIs (t , err , help .NotAvailable )
128
+ })
106
129
}
Original file line number Diff line number Diff line change @@ -54,7 +54,12 @@ func evaluateNextCommandFromTerminal() {
54
54
case cmd := <- terminal .Commands :
55
55
result , err := interpreterInstance .Eval (cmd )
56
56
if err != nil {
57
- fmt .Println (err )
57
+ switch err {
58
+ case help .NotAvailable :
59
+ fmt .Println ("Sorry, help for pi module is only available when the game has been started in the directory of the Go module that uses the Pi." )
60
+ default :
61
+ fmt .Println (err )
62
+ }
58
63
terminal .CommandsProcessed <- terminal .Done
59
64
60
65
return
You can’t perform that action at this time.
0 commit comments