Tools__LintHighlighter.st
author Claus Gittinger <cg@exept.de>
Fri, 21 Jun 2013 01:00:24 +0200
changeset 12947 46051d026ba5
parent 11394 67ceb823b09f
child 12401 4714b9640528
child 12405 76f9a872362b
child 13829 5b5d3d945e2a
permissions -rw-r--r--
class: DebugView changed: #findHandlerFor #ignoreHaltOrBreakpoint:method:line:parameter:forCount:orTimeDuration:orUntilShiftKey:orReceiverClass:orProcess:

"{ 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 $'
! !