Tools__LintHighlighter.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 29 Jan 2012 12:53:39 +0000
branchjv
changeset 12123 4bde08cebd48
parent 11226 601cb4e6c1f9
child 12125 0c49a3b13e43
permissions -rw-r--r--
trunk branched into /branches/jv

"{ 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:something
    rules := something.
! !

!LintHighlighter methodsFor:'accessing-emphasis'!

emphasisForError

    emphasisError isNil ifTrue:[
        emphasisError := Array 
            with: #underwave 
            with: #underlineColor -> Color red                    
    ].
    ^emphasisError

    "Created: / 05-08-2011 / 09:31:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

emphasisForInformation

    emphasisInformation isNil ifTrue:[
        emphasisInformation := Array 
            with: #underwave 
            with: #underlineColor -> Color blue lighter                    
    ].
    ^emphasisInformation

    "Created: / 05-08-2011 / 09:31:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

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

    emphasisWarning isNil ifTrue:[
        emphasisWarning := Array 
            with: #underwave 
            with: #underlineColor -> Color yellow darker                  
    ].
    ^emphasisWarning

    "Created: / 05-08-2011 / 09:31:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!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.
    emphasis := self emphasisForSeverity: rule severity.

    rule result isParseTreeEnvironment ifTrue:[
        formattingMethod ifTrue:[
            | interval |
            interval := rule result selectionIntervalFor: string.
            interval notNil ifTrue:[
                text 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 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>"
! !

!LintHighlighter class methodsFor:'documentation'!

version
    ^ '$Id: Tools__LintHighlighter.st 7810 2011-08-12 14:54:02Z vranyj1 $'
!

version_CVS
    ^ '§Header: /cvs/stx/stx/libtool/Tools__LintHighlighter.st,v 1.2 2011/08/05 13:06:38 vrany Exp §'
! !