"{ Package: 'stx:libtool' }"
"{ NameSpace: Tools }"
Object subclass:#LintHighlighter
instanceVariableNames:'rules formattingMethod emphasisError emphasisInformation
emphasisWarning'
classVariableNames:''
poolDictionaries:''
category:'Interface-Lint'
!
!LintHighlighter methodsFor:'accessing'!
rules
^ rules
!
rules:aCollectionOfRules
rules := aCollectionOfRules.
"Modified (format): / 07-03-2012 / 17:24:02 / cg"
! !
!LintHighlighter methodsFor:'accessing-emphasis'!
emphasisForError
|warnColor|
emphasisError isNil ifTrue:[
warnColor := Color red.
emphasisError := Array
with: #backgroundColor -> warnColor lightened lightened
with: #underwave
with: #underlineColor -> warnColor
].
^emphasisError
"Created: / 05-08-2011 / 09:31:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 08-03-2012 / 03:00:51 / cg"
!
emphasisForInformation
|warnColor|
emphasisInformation isNil ifTrue:[
warnColor := Color blue lighter.
emphasisInformation := Array
with: #backgroundColor -> warnColor lightened lightened
with: #underwave
with: #underlineColor -> warnColor
].
^emphasisInformation
"Created: / 05-08-2011 / 09:31:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 08-03-2012 / 03:01:22 / cg"
!
emphasisForSeverity: severity
severity == #error ifTrue:[^self emphasisForError].
severity == #information ifTrue:[^self emphasisForInformation].
^self emphasisForWarning
"Created: / 05-08-2011 / 09:31:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
emphasisForWarning
|warnColor|
emphasisWarning isNil ifTrue:[
warnColor := (Color redByte: 224 greenByte: 200 blueByte: 45).
emphasisWarning := Array
with: #backgroundColor -> warnColor lightened lightened
with: #underwave
with: #underlineColor -> warnColor
].
^emphasisWarning
"Created: / 05-08-2011 / 09:31:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 08-03-2012 / 03:00:19 / cg"
! !
!LintHighlighter methodsFor:'formatting'!
formatClassDefinition:source in:class
formattingMethod := false.
^ self format: source
"Created: / 04-08-2011 / 23:44:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
formatClassDefinition:source in:class elementsInto: elements
formattingMethod := false.
^ self format: source
"Created: / 04-08-2011 / 23:44:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
formatExpression:source in:class
formattingMethod := false.
^ self format: source
"Created: / 04-08-2011 / 23:45:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
formatExpression:source in:class elementsInto: elements
formattingMethod := false.
^ self format: source
"Created: / 04-08-2011 / 23:43:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
formatMethod:mth source:source in:class using: preferences
formattingMethod := true.
^ self format: source
"Created: / 04-08-2011 / 23:45:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
formatMethod:mth source:source in:class using: preferences elementsInto: elements
formattingMethod := true.
^ self format: source
"Created: / 04-08-2011 / 23:42:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!LintHighlighter methodsFor:'formatting-private'!
format: text
rules ? #() do:[:rule|
self format: text rule: rule
].
^text
"Created: / 04-08-2011 / 23:51:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
format: text rule: rule
| string emphasis |
string := text asString string.
emphasis := self emphasisForSeverity: rule severity.
rule result isParseTreeEnvironment ifTrue:[
formattingMethod ifTrue:[
| interval |
[
interval := rule result selectionIntervalFor: string.
] on: Error do:[:ex |
Transcript showCR:'error in LintHighlighter: ', ex description.
self breakPoint:#jv.
interval := nil.
].
interval notNil ifTrue:[
text asText
emphasisFrom: interval first to: interval last
add: emphasis.
]
].
] ifFalse:[
| searches |
searches := rule result searchStrings asSet.
searches do:[:search|
| i |
i := 1.
[
i := string findString: search startingAt: i.
i ~~ 0
] whileTrue:[
text asText
emphasisFrom: i to: (i + search size - 1)
add: emphasis.
i := i + search size + 1.
]
]
]
"Created: / 04-08-2011 / 23:55:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 07-03-2012 / 18:18:25 / cg"
! !
!LintHighlighter class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libtool/Tools__LintHighlighter.st,v 1.5 2012-03-08 03:16:18 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/libtool/Tools__LintHighlighter.st,v 1.5 2012-03-08 03:16:18 cg Exp $'
! !