carp checkers: add carp checker and make it work

This commit is contained in:
2019-12-16 12:03:18 +01:00
parent 5763bfc040
commit 3254a9e81d
32 changed files with 145 additions and 11 deletions

View File

@@ -0,0 +1 @@
Im an example for checking Carp code.

View File

@@ -0,0 +1,6 @@
examples
failingCarpChecker
^ CarpChecker new
carp: '/Users/veitheller/.local/bin/carp';
dir: '/Users/veitheller/Documents/Code/Github/carp/Carp/';
file: '(def x a)'

View File

@@ -0,0 +1,6 @@
examples
succeedingCarpChecker
^ CarpChecker new
carp: '/Users/veitheller/.local/bin/carp';
dir: '/Users/veitheller/Documents/Code/Github/carp/Carp/';
file: '(def x 1)'

View File

@@ -0,0 +1,11 @@
{
"commentStamp" : "VeitHeller 12/16/2019 12:01",
"super" : "Object",
"category" : "Pond",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "CarpCheckExample",
"type" : "normal"
}

View File

@@ -0,0 +1 @@
Im a parser for the results of a Carp check.

View File

@@ -0,0 +1,7 @@
parsing
parse: aStream
| split contents |
contents := aStream upToEnd.
contents ifEmpty: [ ^ OrderedCollection new ].
split := contents splitOn: '\n'.
^ split collect: [ :s | self parseLine: s ]

View File

@@ -0,0 +1,13 @@
parsing
parseLine: aLine
| split res |
split := aLine splitOn: ':'.
split size == 3 ifFalse: [
^ CarpParseError new message: 'unparseable checker line: "' , aLine , '"'].
res := CarpParseError new
file: (split at: 1);
line: (split at: 2) asNumber.
split := (split at: 3) splitOn: ' '.
^ res
column: (split at: 1) asNumber;
message: (' ' join: split allButFirst)

View File

@@ -0,0 +1,11 @@
{
"commentStamp" : "VeitHeller 12/16/2019 11:18",
"super" : "Object",
"category" : "Pond",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "CarpCheckParser",
"type" : "normal"
}

View File

@@ -0,0 +1 @@
Im a special case of a Carp process for checking errors.

View File

@@ -0,0 +1,9 @@
checking
check
| f |
f := FileReference newTempFilePrefix: 'checker' suffix: '.carp'.
f writeStreamDo: [:stream | stream nextPutAll: file].
proc arguments: {'--check' . f pathString }.
self run.
excepted ifNotNil: [ CarpError new messageText: excepted messageText ].
self died ifFalse: [ ^ CarpCheckParser new parse: proc stdoutStream ]

View File

@@ -0,0 +1,3 @@
checking
file: aString
file := aString

View File

@@ -0,0 +1,3 @@
checking
file
^ file

View File

@@ -0,0 +1,5 @@
checking
initialize
proc := OSSUnixSubprocess new command: 'carp';
redirectStdout;
addAllEnvVariablesFromParentWithoutOverride

View File

@@ -0,0 +1,4 @@
checking
run
[ [ proc run ] on: Error do: [ :err | excepted := err ] ] fork.
(Delay forMilliseconds: 500) wait.

View File

@@ -0,0 +1,13 @@
{
"commentStamp" : "VeitHeller 12/16/2019 10:34",
"super" : "CarpProcess",
"category" : "Pond",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [
"file"
],
"name" : "CarpChecker",
"type" : "normal"
}

View File

@@ -1,6 +1,6 @@
{
"commentStamp" : "VeitHeller 12/14/2019 17:49",
"super" : "Exception",
"super" : "Error",
"category" : "Pond",
"classinstvars" : [ ],
"pools" : [ ],
@@ -9,6 +9,6 @@
"parent",
"error"
],
"name" : "CarpException",
"name" : "CarpError",
"type" : "normal"
}

View File

@@ -0,0 +1 @@
I represent a line of Carp checker output.

View File

@@ -0,0 +1,3 @@
accessing
column: aNumber
column := aNumber

View File

@@ -0,0 +1,3 @@
accessing
file: aString
file := aString

View File

@@ -0,0 +1,3 @@
accessing
line: aNumber
line := aNumber

View File

@@ -0,0 +1,3 @@
accessing
message: aString
message := aString

View File

@@ -0,0 +1,13 @@
accessing
printOn: aStream
(file isNil or: [ line isNil or: column isNil ])
ifTrue: [ aStream nextPutAll: message ]
ifFalse: [
aStream nextPutAll: file.
aStream nextPutAll: ':'.
aStream nextPutAll: line asString.
aStream nextPutAll: ':'.
aStream nextPutAll: column asString.
aStream nextPutAll: ' '.
aStream nextPutAll: message.
]

View File

@@ -0,0 +1,16 @@
{
"commentStamp" : "VeitHeller 12/16/2019 11:26",
"super" : "Object",
"category" : "Pond",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [
"file",
"line",
"column",
"message"
],
"name" : "CarpParseError",
"type" : "normal"
}

View File

@@ -1,3 +1,3 @@
as yet unclassified
carp: aString
^ self new setCarp: aString
^ self new carp: aString

View File

@@ -0,0 +1,3 @@
accessing
carp: aString
proc command: aString

View File

@@ -0,0 +1,3 @@
accessing
dir: aString
proc environmentAt: 'CARP_DIR' put: aString

View File

@@ -1,3 +0,0 @@
accessing
setCarp: aString
proc command: aString

View File

@@ -1,3 +0,0 @@
accessing
setDir: aString
proc environmentAt: 'CARP_DIR' put: aString

View File

@@ -7,8 +7,6 @@
"classvars" : [ ],
"instvars" : [
"proc",
"out",
"in",
"excepted"
],
"name" : "CarpProcess",