Cleanup - Use ParseTreeIndex consistently. Fixes some minor issues when building
index for variables.
--- a/SyntaxHighlighter2.st Tue Feb 25 22:55:30 2014 +0100
+++ b/SyntaxHighlighter2.st Tue Feb 25 23:04:06 2014 +0100
@@ -929,106 +929,35 @@
"Modified: / 19-01-2012 / 10:47:37 / cg"
"Created: / 16-02-2012 / 23:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-variable
- | node |
-
- ignoreBadIdentifier := classToCompileFor isNil.
- node := super variable.
- ignoreBadIdentifier := false.
- node isVariable ifTrue:[
- | el prevEl |
-
- el := elements newElementFor: node.
- prevEl := lastVariableElements at:node name ifAbsent:[nil].
- prevEl notNil ifTrue:[prevEl next:el].
- lastVariableElements at:node name put:el.
- elements add: el.
- ].
- ^node
-
- "Modified: / 19-01-2000 / 16:22:16 / cg"
- "Created: / 16-02-2012 / 22:21:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!SyntaxHighlighter2 methodsFor:'syntax detection'!
-markArgumentIdentifierFrom:pos1 to:pos2
- | node el prevEl |
+markLocalVariableDeclaration: name from:pos1 to:pos2
+ | type node |
- super markArgumentIdentifierFrom:pos1 to:pos2.
- node := VariableNode methodArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
+ super markLocalVariableDeclaration: name from:pos1 to:pos2.
+
+ type := currentBlock notNil ifTrue:[#BlockVariable] ifFalse:[#MethodVariable].
+ node := VariableNode type: type name: name.
node startPosition: pos1 endPosition: pos2.
- el := elements newElementFor: node.
- prevEl := lastVariableElements at:node name ifAbsent:[nil].
- prevEl notNil ifTrue:[prevEl next:el].
- lastVariableElements at:node name put:el.
- elements add: el.
+ self rememberVariableElementFor: node from: pos1 to: pos2 assigned: false.
+
+ "Created: / 25-02-2014 / 20:22:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+markMethodArgumentIdentifierFrom:pos1 to:pos2
+ | node |
+
+ super markMethodArgumentIdentifierFrom:pos1 to:pos2.
+
+ node := VariableNode methodArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
+ node startPosition: pos1 endPosition: pos2.
+ self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
"Created: / 24-07-2010 / 09:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 21-08-2011 / 09:27:26 / cg"
- "Modified: / 16-02-2012 / 22:34:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-markAssignedVariable:v from:pos to:endPos
- super markAssignedVariable:v from:pos to:endPos.
- (v type == #GlobalVariable) ifTrue:[^self].
-
- self rememberVariableElementFor:v name type:v type from:pos to:endPos assigned:true
-!
-
-markBadIdentifierFrom:pos1 to:pos2
-
- super markBadIdentifierFrom:pos1 to:pos2
-
- "Created: / 17-03-2012 / 19:02:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-markGlobalClassIdentifierFrom:pos1 to:pos2
-
- | name env cls |
-
- super markGlobalClassIdentifierFrom:pos1 to:pos2.
-
- name := token isString ifTrue:[token asSymbolIfInterned] ifFalse:[nil].
- name notNil ifTrue:[
- env := (classToCompileFor ? UndefinedObject) theNonMetaclass environment.
- cls := env isNameSpace ifTrue:[env at: name] ifFalse:[nil].
- cls isNil ifTrue:[
- cls := Smalltalk at: name
- ]
- ].
-
- elements add: ((SyntaxElementVariable from: pos1 to: pos2 type: #class value: cls) name:name)
-
- "Created: / 14-02-2010 / 14:08:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 15-02-2010 / 10:53:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 18-11-2011 / 14:54:53 / cg"
-!
-
-markLocalIdentifierFrom:pos1 to:pos2
- | node el prevEl |
-
- super markLocalIdentifierFrom:pos1 to:pos2.
- node := VariableNode methodLocalNamed:(sourceText string copyFrom: pos1 to: pos2).
- node startPosition: pos1 endPosition: pos2.
- el := elements newElementFor: node.
- prevEl := lastVariableElements at:node name ifAbsent:[nil].
- prevEl notNil ifTrue:[prevEl next:el].
- lastVariableElements at:node name put:el.
- elements add: el.
-
- "Modified: / 21-08-2011 / 09:27:26 / cg"
- "Created: / 16-02-2012 / 22:36:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-markMethodArgumentIdentifierFrom:pos1 to:pos2
- super markMethodArgumentIdentifierFrom:pos1 to:pos2.
- self rememberVariableElementFor:tokenName type:#MethodArg from:pos1 to:pos2 assigned:false
-
- "Created: / 24-07-2010 / 09:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 21-08-2011 / 09:27:26 / cg"
+ "Modified: / 25-02-2014 / 12:15:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode
@@ -1067,10 +996,30 @@
!
markSelfFrom:pos1 to:pos2
+ | node |
+
super markSelfFrom:pos1 to:pos2.
- self rememberVariableElementFor:'self' type:#self from:pos1 to:pos2
+
+ node := SelfNode new.
+ node startPosition: pos1 endPosition: pos2.
+ node type: #Self.
+ self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
"Created: / 21-08-2011 / 09:15:45 / cg"
+ "Modified: / 25-02-2014 / 21:56:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+markSuperFrom:pos1 to:pos2
+ | node |
+
+ super markSuperFrom:pos1 to:pos2.
+
+ node := SuperNode new.
+ node startPosition: pos1 endPosition: pos2.
+ node type: #Super.
+ self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
+
+ "Created: / 25-02-2014 / 21:57:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
markUnknownIdentifierFrom:pos1 to:pos2
@@ -1084,51 +1033,46 @@
!
markVariable:v from:pos1 to:pos2 assigned:assigned
+ self rememberVariableElementFor:v from:pos1 to:pos2 assigned:assigned.
super markVariable:v from:pos1 to:pos2 assigned:assigned.
- (v type == #GlobalVariable) ifTrue:[^self].
- assigned ifTrue:[^ self]. "/ already done in redefined markAssignedVariable...
-
- self rememberVariableElementFor:v name type:v type from:pos1 to:pos2 assigned:false
"Created: / 25-06-2010 / 13:03:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 25-06-2010 / 14:23:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 21-08-2011 / 09:26:30 / cg"
+ "Modified: / 25-02-2014 / 14:07:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-rememberVariableElementFor:name type:typeSymbol from:pos1 to:pos2
- self rememberVariableElementFor:name type:typeSymbol from:pos1 to:pos2 assigned:false
-!
+rememberVariableElementFor:node from:pos1 to:pos2 assigned:assigned
+ |name typeSymbol element prev|
-rememberVariableElementFor:name type:typeSymbol from:pos1 to:pos2 assigned:assigned
- |element prev|
-
+ name := node name.
+ typeSymbol := node type.
prev := (lastVariableElements at:typeSymbol ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
(prev notNil and:[prev start == pos1]) ifTrue:[
- prev assigned:assigned.
+"/ prev assigned:assigned.
^ self
].
- element := (SyntaxElementVariable from: pos1 to: pos2 type:typeSymbol value: name assigned:assigned) name:name.
+ element := elements newElementFor: node.
prev notNil ifTrue:[prev next:element].
(lastVariableElements at:typeSymbol) at:name put:element.
elements add: element.
- "Created: / 21-08-2011 / 09:26:24 / cg"
+ "Created: / 25-02-2014 / 12:13:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!SyntaxHighlighter2 class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.19 2014-02-05 18:59:09 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.20 2014-02-25 22:04:06 vrany Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.19 2014-02-05 18:59:09 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.20 2014-02-25 22:04:06 vrany Exp $'
!
version_SVN
- ^ '$Id: SyntaxHighlighter2.st,v 1.19 2014-02-05 18:59:09 cg Exp $'
+ ^ '$Id: SyntaxHighlighter2.st,v 1.20 2014-02-25 22:04:06 vrany Exp $'
! !