class: SyntaxHighlighter2
added: #markBlockArgumentIdentifierFrom:to:
comment/format in: #elements:
changed:7 methods
--- a/SyntaxHighlighter2.st Fri Feb 27 20:16:27 2015 +0100
+++ b/SyntaxHighlighter2.st Fri Feb 27 21:20:50 2015 +0100
@@ -276,10 +276,10 @@
^ elements
!
-elements:aParseTreeIndex
+elements:aParseTreeIndexCollection
"the element collection, to collect variables, selectors etc. into"
- elements := aParseTreeIndex.
+ elements := aParseTreeIndexCollection.
"Modified (comment): / 21-08-2011 / 09:13:31 / cg"
!
@@ -694,11 +694,12 @@
savedLastSelectorElement := lastSelectorElement.
lastSelectorElement := nil.
+
node := super expression.
((node ~~ #Error) and:[node isMessage]) ifTrue:[
[ lastSelectorElement notNil ] whileTrue:[
lastSelectorElement node parent: node.
- lastSelectorElement := lastSelectorElement prev.
+ lastSelectorElement := lastSelectorElement previousElement.
].
].
lastSelectorElement := savedLastSelectorElement.
@@ -920,26 +921,41 @@
!SyntaxHighlighter2 methodsFor:'syntax detection'!
+markBlockArgumentIdentifierFrom:pos1 to:pos2
+ "in addition to marking, remember the variable reference"
+
+ | node |
+
+ super markBlockArgumentIdentifierFrom:pos1 to:pos2.
+
+ node := VariableNode blockArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
+ node block:currentBlock.
+ self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
+!
+
markLocalVariableDeclaration: name from:pos1 to:pos2
+ "in addition to marking, remember the variable reference"
+
| type node |
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.
+ node block:currentBlock. "/ which is nil for method locals
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
+ "in addition to marking, remember the variable reference"
+
| 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>"
@@ -955,12 +971,12 @@
marked specially (and not as an error when the class is not yet loaded -
the code is correct as JavaClassAccessor loads it lazily"
(aReceiverNode isJavaPackageReference) ifTrue:[
- self
- markFrom:pos1 to:pos2
- withEmphasis:preferences globalClassIdentifierEmphasis
- color: preferences globalClassIdentifierColor
+ self
+ markFrom:pos1 to:pos2
+ withEmphasis:preferences globalClassIdentifierEmphasis
+ color: preferences globalClassIdentifierColor
] ifFalse:[
- super markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode.
+ super markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode.
].
"don't create symbols for partial typed selectors"
@@ -969,12 +985,12 @@
element := elements newElementFor: (SelectorNode value: selectorString from: pos1 to: pos2).
(lastSelectorElement notNil "and:[lastSelectorElement value = selectorString]") ifTrue:[
- lastSelectorElement next: element.
+ lastSelectorElement nextElement: element.
].
elements add: element.
lastSelectorElement := "(self isValidUnarySelector:tokenType)"false
- ifTrue:[nil]
- ifFalse:[element].
+ ifTrue:[nil]
+ ifFalse:[element].
"Created: / 14-02-2010 / 17:40:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 14-02-2010 / 19:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -983,12 +999,13 @@
!
markSelfFrom:pos1 to:pos2
+ "in addition to marking, remember the variable reference"
+
| node |
super markSelfFrom:pos1 to:pos2.
node := SelfNode new.
- node startPosition: pos1 endPosition: pos2.
node type: #Self.
self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
@@ -997,12 +1014,13 @@
!
markSuperFrom:pos1 to:pos2
+ "in addition to marking, remember the variable reference"
+
| 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
@@ -1029,20 +1047,26 @@
!
rememberVariableElementFor:node from:pos1 to:pos2 assigned:assigned
- |name typeSymbol element prev|
+ |name typeSymbol key element prev|
+
+ node startPosition: pos1 endPosition: pos2.
name := node name.
- typeSymbol := node type.
- prev := (lastVariableElements at:typeSymbol ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
+ typeSymbol := key := node type.
+ (typeSymbol == #BlockArg or:[typeSymbol == #BlockVariable]) ifTrue:[
+ key := (typeSymbol -> node block)
+ ].
+
+ prev := (lastVariableElements at:key ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
(prev notNil and:[prev start == pos1]) ifTrue:[
-"/ prev assigned:assigned.
+ "/ prev assigned:assigned.
^ self
].
element := elements newElementFor: node.
- prev notNil ifTrue:[prev next:element].
- (lastVariableElements at:typeSymbol) at:name put:element.
+ prev notNil ifTrue:[prev nextElement:element].
+ (lastVariableElements at:key) at:name put:element.
elements add: element.
@@ -1052,14 +1076,14 @@
!SyntaxHighlighter2 class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
!
version_SVN
- ^ '$Id: SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
+ ^ '$Id: SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
! !