extensions.st
author Claus Gittinger <cg@exept.de>
Tue, 10 Dec 2019 14:59:54 +0100
branchcvs_MAIN
changeset 1115 2182c6e411dc
parent 1104 9e80c83ad113
permissions -rw-r--r--
#BUGFIX by cg class: SmallSense::CompletionView changed: #keyPress:x:y:

"{ Package: 'stx:goodies/smallsense' }"!

!AssignmentNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock

    aBlock value: #variable   value: variable.
    aBlock value: #expression value: expression.

    "Modified: / 26-11-2011 / 10:39:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!AssignmentNode methodsFor:'accessing-SmallSense'!

inferedType

    ^ expression inferedType

    "Created: / 26-11-2011 / 12:38:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!AssignmentNode methodsFor:'accessing-SmallSense'!

inferedType: aSmallSenseType
    "/ cg: why not????
"/    ^ self shouldNotImplement
    ^ super inferedType: aSmallSenseType

    "Created: / 26-11-2011 / 12:37:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 14-07-2017 / 13:37:28 / cg"
! !

!BlockNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock
    "Enumerates all direct children and evaluates a block
     with its name (usually instVar name) and the node itself"

    aBlock value:'statements' value: statements

    "Created: / 20-09-2013 / 01:03:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ConfigurableFeatures class methodsFor:'queries-features'!

hasSmallSenseEnabled

    ^(UserPreferences current smallSenseEnabled == true)


    "
     ConfigurableFeatures hasSmallSenseEnabled
     ConfigurableFeatures includesFeature:'SmallSenseEnabled'
    "

    "Created: / 27-11-2011 / 17:22:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!EditTextViewCompletionSupport methodsFor:'queries'!

isCompletionViewShown
    ^ completionView notNil and:[ completionView isVisible ]

    "Created: / 13-08-2014 / 16:00:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!HTMLDocumentView methodsFor:'actions'!

doQuickFix: quickFixNo
    | app |

    app := self application.
    app notNil ifTrue:[
	app doQuickFix: quickFixNo
    ].

    "Created: / 16-02-2012 / 14:18:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!MessageNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock

    aBlock value: #receiver value: receiver.
    argArray notNil ifTrue:[
	argArray withIndexDo:[:node :idx|
	    aBlock value: 'arg[' , idx printString , ']' value: node
	]
    ]

    "Modified: / 26-11-2011 / 12:10:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!MessageNode methodsFor:'navigation-SmallSense'!

navigateToUsing: navigator
    navigator navigateToMessageNode: self.

    "Created: / 24-09-2013 / 10:04:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Method methodsFor:'inspecting'!

inspector2TabRBParseTreeInspector
    <inspector2Tab>

    "provide an extra tab, which show the RefactoryBrowser-AST (parsetree) of the sourcecode"
    
    ^ (self newInspector2Tab)
        label:'Parse Tree (RB)';
        priority:35;
        application:
                [
                    | src node |

                    src := self source.
                    node := RBParser parseMethod: src.
                    SmallSense::ParseTreeInspector new node:node source:src.
                ];
        yourself

    "Created: / 15-10-2014 / 02:37:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Method methodsFor:'inspecting'!

inspector2TabSTXParseTreeInspector
    <inspector2Tab>

    "provide an extra tab, which show the ST/X-AST (parsetree) of the sourcecode"

    ^ (self newInspector2Tab)
        label:'Parse Tree (ST/X)';
        priority:36;
        application:
                [
                    | src parser |

                    src := self source.
                    parser := self parserClass parseMethod: src.
                    SmallSense::ParseTreeInspector new node:parser tree source:src.
                ];
        yourself

    "Created: / 15-10-2014 / 11:23:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ParseErrorNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock
    "superclass ParseNode says that I am responsible to implement this method"

    children withIndexDo:[:child :index |
        aBlock value:'child[' , index printString , ']' value: child
    ]

    "Modified: / 20-09-2013 / 01:00:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ParseNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock
    "Enumerates all direct children and evaluates a block
     with its name (usually instVar name) and the node itself"

    self class allInstVarNames withIndexDo:[:n :i|
	| v |

	v := self instVarAt: i.
	(v isKindOf: ParseNode) ifTrue:[
	    aBlock value: n value: v
	] ifFalse:[
	    (v isSequenceable) ifTrue:[
		v withIndexDo:[ :v2 :i2|
		    (v2 isKindOf: ParseNode) ifTrue:[
			aBlock value: (n, '[' , i2 printString , ']') value: v2.
		    ]
		]
	    ]
	]
    ]

    "Created: / 26-11-2011 / 10:38:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 19-09-2013 / 18:18:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ParseNode methodsFor:'accessing-SmallSense'!

inferedType

    | t |
    t := self objectAttributeAt:#inferedType.
    t isNil ifTrue:[t := SmallSense::Type unknown].
    ^t

    "Created: / 26-11-2011 / 12:38:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 24-08-2013 / 20:46:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ParseNode methodsFor:'accessing-SmallSense'!

inferedType: aSmallSenseType

    ^ self objectAttributeAt:#inferedType put: aSmallSenseType

    "Created: / 26-11-2011 / 12:37:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ParseNode methodsFor:'inspecting'!

inspector2TabSTXParseTreeInspector
    <inspector2Tab>

    ^ (self newInspector2Tab)
	label:'Parse Tree (ST/X)';
	priority:36;
	application:
		[
		    SmallSense::ParseTreeInspector new node:self source:nil.
		];
	yourself

    "Created: / 15-10-2014 / 11:23:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ParseNode methodsFor:'testing'!

isSelector
    "return true, if this is a node for an selctors"

    ^ false

    "Created: / 22-02-2011 / 21:44:45 / Jakub <zelenja7@fel.cvut.cz>"
! !

!ParseNode methodsFor:'navigation-SmallSense'!

navigateToUsing:navigator
    "Nothing by default, to overwritten by subclasses"

    "Modified: / 24-09-2013 / 10:05:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Parser methodsFor:'inspecting'!

inspector2TabSTXParseTreeInspector
    <inspector2Tab>

    ^ (self newInspector2Tab)
	label:'Parse Tree (ST/X)';
	priority:36;
	application:
		[
		    | src parser |

		    source isExternalStream ifFalse:[
			src := source collection
		    ].
		    SmallSense::ParseTreeInspector new node:tree source:src.
		];
	yourself

    "Created: / 15-10-2014 / 11:23:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!PrimaryNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock

    "Initionally left blank, primary nodes have no children"

    "Modified: / 26-11-2011 / 11:49:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!PrimitiveNode methodsFor:'accessing-SmallSense'!

inferedType

    ^ SmallSense::Type withClass: UndefinedObject "/ Not really true, should be 'void'

    "Created: / 08-12-2013 / 22:25:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!RBBlockNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock
    arguments withIndexDo:[:statement :index |
	aBlock value: 'argument[', index printString ,']' value: statement
    ].
    body statements withIndexDo:[:statement :index |
	aBlock value: 'statement[', index printString ,']' value: statement
    ]

    "Created: / 15-10-2014 / 10:42:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!RBContainsSmalltalkXEOLCommentRule methodsFor:'accessing'!

fixes: fixer
    | changes |

    changes := self changes.
    changes notEmptyOrNil ifTrue:[
        fixer fix
            rule: self;
            label:'Change EOL comments to standard Smalltalk comments';
            action: [   
                fixer apply: ((ChangeSet withAll:changes) name: self name)
            ].
    ]

    "Created: / 01-02-2012 / 12:11:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 15-12-2014 / 16:46:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!RBLintRule methodsFor:'accessing'!

fixes: aSmallSenseQuickFixer
    "Adds all possible code fixes to given quick fixer.
     Default is to do nothing, meaning that there are
     no quickfixes available"

    "Created: / 01-02-2012 / 12:09:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!RBMethodNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock
    arguments withIndexDo:[:statement :index |
	aBlock value: 'argument[', index printString ,']' value: statement
    ].
    body statements withIndexDo:[:statement :index |
	aBlock value: 'statement[', index printString ,']' value: statement
    ]

    "Created: / 15-10-2014 / 09:28:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 15-10-2014 / 10:41:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!RBProgramNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock

    "Enumerates all direct children and evaluates a block
     with its name (usually instVar name) and the node itself"

    self class allInstVarNames withIndexDo:[:n :i|
	| v |

	n ~~ #parent ifTrue:[
	    v := self instVarAt: i.
	    (v isKindOf: RBProgramNode) ifTrue:[
		aBlock value: n value: v
	    ] ifFalse:[
		(v isSequenceable) ifTrue:[
		    v withIndexDo:[ :v2 :i2|
			(v2 isKindOf: RBProgramNode) ifTrue:[
			    aBlock value: (n, '[' , i2 printString , ']') value: v2.
			]
		    ]
		]
	    ]
	]
    ]

    "Created: / 15-10-2014 / 10:39:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!RBProgramNode methodsFor:'accessing'!

startPosition
    ^ self start

    "Created: / 15-10-2014 / 09:34:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!RBTransformationRule methodsFor:'accessing'!

fixes: fixer
    | changes |

    changes := self changes.
    changes notEmptyOrNil ifTrue:[
	fixer fix
	    rule: self;
	    label:'Rewrite the code';
	    action: [
		fixer apply: ((ChangeSet withAll:self changes) name: self name)
	    ].
    ]

    "Created: / 01-02-2012 / 12:11:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 15-12-2014 / 16:46:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ReturnNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock
    aBlock value: 'expression' value: expression.

    "Created: / 10-04-2014 / 08:15:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!StatementNode methodsFor:'enumeration'!

childNamesAndValuesDo:aBlock
    | stmt index |
    stmt := self.
    index := 1.
    [ stmt notNil ] whileTrue:[
	| expr |

	stmt isReturnNode ifTrue:[
	    expr := stmt.
	] ifFalse:[
	    expr := stmt expression.
	].
	aBlock value: ('statement[%1]' bindWith: index) value: expr.
	stmt := stmt nextStatement.
	index := index + 1.
    ]

    "Modified: / 10-04-2014 / 08:13:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!StatementNode methodsFor:'accessing-SmallSense'!

inferedType

    ^ expression inferedType

    "Created: / 26-11-2011 / 12:38:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!StatementNode methodsFor:'accessing-SmallSense'!

inferedType: aSmallSenseType

    ^ self shouldNotImplement

    "Created: / 26-11-2011 / 12:37:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::CodeCompletionService class methodsFor:'instance creation'!

new
    "return an initialized instance"

    ^ (SmallSense::EditService ? self) basicNew initialize.

    "Created: / 27-07-2013 / 22:47:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 28-11-2014 / 15:40:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::CodeHighlightingService class methodsFor:'instance creation'!

new
    "return an initialized instance"

    |serviceUsed|

    "/ cg: what an ugly hack; @Jan, why this
    "/ ^ (SmallSense::CodeHighlightingService ? self) basicNew initialize.

    "/ cg: at least allow subclassing
    serviceUsed := self.
    self == Tools::CodeHighlightingService ifTrue:[
	serviceUsed := (SmallSense::CodeHighlightingService ? self).
    ].
    ^ serviceUsed basicNew initialize

    "Created: / 27-07-2013 / 22:47:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 23-09-2013 / 14:32:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::CodeNavigationService class methodsFor:'instance creation'!

new
    "return an initialized instance"

    ^ (SmallSense::CodeNavigationService ? self) basicNew initialize.

    "Created: / 27-07-2013 / 22:47:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 23-09-2013 / 14:32:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::LintService methodsFor:'event handling'!

buttonPress:button x:x y:y in:view
    "Handles an event in given view (a subview of codeView).
     If the method returns true, it has eaten the event and it will not be processed
     by the view or other services.
     Notice, that this is called both for events in the gutter AND for events in the text."

    |lineNr|

    view == gutterView ifTrue:[
        button == 1 ifTrue:[
            lineNr := textView yVisibleToLineNr:y.
            lineNr notNil ifTrue:[
                ^ self showInfoWindowForLine: lineNr
            ].
            ^ false.
        ].
    ].
    ^ false

    "Created: / 30-01-2012 / 21:04:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 03-12-2014 / 10:01:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::LintService methodsFor:'private'!

showInfoWindowForLine: lineNo
    | ann infoApp |

    ann := self annotationAtLine: lineNo.
    ann isNil ifTrue:[ ^ false ].

    infoApp := SmallSense::CriticsWindow new
        rule: ann rule;
        codeView: codeView;
        allButOpen;
        openWindowAt: (Screen current pointerPosition - (20@20)).

    SmallSense::CriticsWindow rememberLastExtentOf:infoApp window.
    ^true

    "Created: / 30-01-2012 / 21:04:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 03-12-2014 / 10:00:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 02-03-2019 / 13:09:34 / Claus Gittinger"
! !

!Tools::NavigationState methodsFor:'aspects - SmallSense'!

stx_goodies_smallsense_selectedClasses
    <swizzle: #selectedClasses>
    selectedClasses isNil ifTrue:[
	selectedClasses := nil asValue.
	(ConfigurableFeatures includesFeature:'SmallSenseEnabled') ifTrue:[
	    selectedClasses
		onChangeEvaluate:[
		    selectedClasses value ? #() do:[:cls |
			(Smalltalk at:#'SmallSense::Manager') instance updateInfoForClass:cls.
		    ].
		]
	]
    ].
    ^ selectedClasses

    "Created: / 24-08-2013 / 21:53:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'private-searching-smallsense'!

searchCompletionBlock_SmallSense
    "This returns a class/selector name completion block that uses
     standard DoWhatIMeanSupport"

    ^ [:patternString | self smallSenseSearchCompletion:patternString ]

    "Created: / 25-11-2013 / 12:27:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'private-searching-smallsense'!

smallSenseSearchCompletion:patternString
    "/sorry, no method search yet"

    ^ self smallSenseSearchCompletionNewForClass:patternString

    "Modified: / 04-08-2011 / 19:05:28 / cg"
    "Created: / 04-12-2011 / 22:22:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'private-searching-smallsense'!

smallSenseSearchCompletionBlock
    "This returns a class/selector name completion block that uses
     standard DoWhatIMeanSupport"

    ^ [:patternString | self smallSenseSearchCompletion:patternString ]

    "Modified: / 04-08-2011 / 19:05:28 / cg"
    "Created: / 04-12-2011 / 22:13:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'private-searching-smallsense'!

smallSenseSearchCompletionEntryForClass:aClass showPrefix:showPrefix
    ^ (SmallSense::ClassPO new)
	klass:aClass;
	showPrefix:showPrefix.

    "Created: / 06-04-2012 / 12:55:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 25-11-2013 / 12:16:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!Tools::NewSystemBrowser methodsFor:'private-searching-smallsense'!

smallSenseSearchCompletionNewForClass:patternString
    | env  pattern  matcher  matches  relax  withPrefix |

    patternString isEmptyOrNil ifTrue:[
	^ #( '' #() )
    ].
    env := self theSingleSelectedNamespace ? #Smalltalk.
    env = NavigatorModel nameListEntryForALL ifTrue:[
	env := #Smalltalk
    ].
    env := Smalltalk at:env.
    withPrefix := patternString includes:$:.
    pattern := StringPattern readFrom:patternString onError:[ ^ #( '' #() ) ].
    withPrefix ifTrue:[
	matcher := [:cls | pattern match:cls name ]
    ] ifFalse:[
	matcher := [:cls | pattern match:cls nameWithoutPrefix ]
    ].
    relax := 1.
    [
	matches isEmptyOrNil and:[ relax <= 3 ]
    ] whileTrue:[
	matches := OrderedCollection new.
	env
	    keysDo:[:nm |
		| cls |

		cls := env at:nm.
		(cls notNil and:[ cls isBehavior and:[ (matches includesIdentical:cls) not ] ])
			ifTrue:[
			    "cls isJavaClass"false ifTrue:[
				cls isAnonymous ifFalse:[
				    (matcher value:cls) ifTrue:[
					matches add:cls
				    ].
				].
			    ] ifFalse:[
				(matcher value:cls) ifTrue:[
				    matches add:cls
				].
			    ]
			].
	    ].
	relax := relax + 1.
    ].
    matches isEmpty ifTrue:[
	^ #( nil #() )
    ] ifFalse:[
	matches := matches
		collect:[:cls |
		    self smallSenseSearchCompletionEntryForClass:cls showPrefix:withPrefix
		].
	^ {
	    matches first.
	    matches
	}
    ]

    "Created: / 06-04-2012 / 12:56:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 07-08-2014 / 13:10:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseBackgroundLintEnabled
    "Return true if SmallSense background source checking is enabled"

    ^self at:#smallSenseBackgroundLintEnabled ifAbsent:[false]

    "Created: / 30-01-2012 / 19:59:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseBackgroundLintEnabled: aBoolean
    "Return true if SmallSense background source checking is enabled"

    ^self at:#smallSenseBackgroundLintEnabled put: (aBoolean ? false)

    "
	UserPreferences current smallSenseBackgroundLintEnabled
	UserPreferences current smallSenseBackgroundLintEnabled: true
	UserPreferences current smallSenseBackgroundLintEnabled: false
    "

    "Created: / 30-01-2012 / 20:00:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseBackgroundTypingEnabled
    "Return true if SmallSense background source checking is enabled"

    ^self at:#smallSenseBackgroundTypingEnabled ifAbsent:[false]

    "Created: / 04-02-2012 / 21:41:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseBackgroundTypingEnabled: aBoolean
    "Return true if SmallSense background source checking is enabled"

    ^self at:#smallSenseBackgroundTypingEnabled put: (aBoolean ? false)

    "
	UserPreferences current smallSenseBackgroundTypingEnabled
	UserPreferences current smallSenseBackgroundTypingEnabled: true
	UserPreferences current smallSenseBackgroundTypingEnabled: false
    "

    "Created: / 04-02-2012 / 21:41:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseCompleteIfUnambiguous

    ^self at:#smallSenseCompleteIfUnambiguous ifAbsent:[false]

    "Created: / 18-01-2014 / 23:08:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseCompleteIfUnambiguous: aBoolean

    ^self at:#smallSenseCompleteIfUnambiguous put: (aBoolean ? false).

    "
    UserPreferences current smallSenseCompleteIfUnambiguous
    UserPreferences current smallSenseCompleteIfUnambiguous: true.
    UserPreferences current smallSenseCompleteIfUnambiguous: false.
    "

    "Created: / 18-01-2014 / 23:08:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseCompletionEnabled

    ^self at:#smallSenseCompletionEnabled ifAbsent:[self smallSenseEnabled]

    "Created: / 27-02-2014 / 09:29:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseCompletionEnabled: aBoolean

    ^self at:#smallSenseCompletionEnabled put: (aBoolean ? false)

    "Created: / 27-02-2014 / 09:29:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseElectricEditSupportEnabled
    ^ self at:#smallSenseElectricEditSupportEnabled ifAbsent:[false]

    "Created: / 23-04-2018 / 17:25:42 / stefan"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseElectricEditSupportEnabled: aBoolean
    ^ self at:#smallSenseElectricEditSupportEnabled put: (aBoolean ? false).

    "
    UserPreferences current smallSenseElectricEditSupportEnabled
    UserPreferences current smallSenseElectricEditSupportEnabled: true.
    UserPreferences current smallSenseElectricEditSupportEnabled: false.
    "

    "Created: / 23-04-2018 / 17:25:16 / stefan"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseEnabled
    "Return true if SmallSense is enabled"

    ^self at:#smallSenseEnabled ifAbsent:[false]

    "Created: / 27-11-2011 / 17:20:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense'!

smallSenseEnabled: aBoolean
    "enable/disable SmallSense"

    ^self at:#smallSenseEnabled put: (aBoolean ? false).

    "
    UserPreferences current smallSenseEnabled.
    UserPreferences current smallSenseEnabled: true.
    UserPreferences current smallSenseEnabled: false.
    "

    "Created: / 02-04-2012 / 11:37:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense-Smalltalk'!

smallSenseSmalltalkIndentOnPasteEnabled
    "Return true if SmallSense indent-on-paste is enabled for Smalltalk language"

    ^self at:#smallSenseSmalltalkIndentOnPasteEnabled ifAbsent:[false]

    "Created: / 19-07-2014 / 00:11:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!UserPreferences methodsFor:'accessing-SmallSense-Smalltalk'!

smallSenseSmalltalkIndentOnPasteEnabled: aBoolean
    "Set SmallSense indent-on-paste feature for Smalltalk"

    ^ self at:#smallSenseSmalltalkIndentOnPasteEnabled put: (aBoolean ? false)

    "
    UserPreferences current smallSenseSmalltalkIndentOnPasteEnabled
    UserPreferences current smallSenseSmalltalkIndentOnPasteEnabled: true.
    UserPreferences current smallSenseSmalltalkIndentOnPasteEnabled: false.
    "

    "Created: / 19-07-2014 / 00:11:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!VariableNode methodsFor:'queries'!

isGlobalOrPrivateClass

    ^ type == #GlobalVariable or:[type == #PrivateClass]

    "Created: / 27-11-2011 / 16:31:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!VariableNode methodsFor:'navigation-SmallSense'!

navigateToUsing: navigator
    navigator navigateToVariableNode: self.

    "Created: / 24-09-2013 / 10:04:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!stx_goodies_smallsense class methodsFor:'documentation'!

extensionsVersion_CVS
    ^ '$Header$'
! !

!stx_goodies_smallsense class methodsFor:'documentation'!

extensionsVersion_HG

    ^ '$Changeset: <not expanded> $'
! !