-
-
Notifications
You must be signed in to change notification settings - Fork 354
/
RBComment.class.st
93 lines (72 loc) · 2.16 KB
/
RBComment.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"
A RBComment represents a text comment associated to an AST node.
A RBComment is not an AST-Node (not subclass of program node). But its instance are just wrapping the comment text and (start-) position.
Due to the way the parser handles comments, the RBComment is assigned to its preceding (real) AST node, although we often write the comment prior to a statement.
For example:
foo
""method comment""
self firstStatement.
""comment about the return""
^ self
The ""method comment"" is assigned to the method node, the ""comment about the return"" is assigned
to the ""self firstStatement"" node!
instance variables
contents <String> the comment text
start <Number> (start-) position within the method source
"
Class {
#name : #RBComment,
#superclass : #RBNode,
#instVars : [
'contents',
'start'
],
#category : #'AST-Core-Nodes'
}
{ #category : #'instance creation' }
RBComment class >> with: aString at: startPosition [
^ self new
with: aString at: startPosition;
yourself.
]
{ #category : #visiting }
RBComment >> acceptVisitor: aProgramNodeVisitor [
"At some point we will have to think what we do to visit comment.
It may have an impact on visitors so this should be done carefully.
Since by default previously comment node were not subclass of ProgramNode
we do nothing by default."
]
{ #category : #accessing }
RBComment >> contents [
^ contents
]
{ #category : #testing }
RBComment >> intersectsInterval: anInterval [
"Make comments polymorphic with program nodes for hit detection"
^(anInterval first between: self start and: self stop)
or: [ self start between: anInterval first and: anInterval last ]
]
{ #category : #printing }
RBComment >> printOn: aStream [
super printOn: aStream.
aStream nextPutAll: ' "'.
aStream nextPutAll: contents.
aStream nextPutAll: '" '.
]
{ #category : #accessing }
RBComment >> size [
^ contents size + 2 "must take into account quotation marks"
]
{ #category : #accessing }
RBComment >> start [
^ start
]
{ #category : #accessing }
RBComment >> stop [
^ start + self size - 1
]
{ #category : #initialization }
RBComment >> with: aString at: startPosition [
start := startPosition.
contents := aString
]