The end of the position's range, error if not a range position
The end of the position's range, or point if not a range position
If this is a range position, the offset position of its point.
If this is a range position, the offset position of its point. Otherwise the position itself
If this is a range position, the offset position of its end.
If this is a range position, the offset position of its end. Otherwise the position itself
If this is a range position, the offset position of its start.
If this is a range position, the offset position of its start. Otherwise the position itself
Map this position to a position in an original source file.
Map this position to a position in an original source file. If the SourceFile is a normal SourceFile, simply return this.
Does this position include the given position pos
.
Does this position include the given position pos
.
This holds if this
is a range position and its range [start..end]
is the same or covers the range of the given position, which may or may not be a range position.
Is this position neither a NoPosition nor a FakePosition? If isDefined is true, offset and source are both defined.
Is this position a non-transparent range position?
Is this position a range position?
Is this position a transparent position?
if opaque range, make this position transparent
Does this position overlap with that position? This holds if both positions are ranges and there is an interval of non-zero length that is shared by both position ranges.
The point (where the ^ is) of the position
The point (where the ^ is) of the position, or else default' if undefined
Does this position precede that position? This holds if both positions are defined and the end point of this position is not larger than the start point of the given position.
Does this position properly include the given position pos
("properly" meaning their
ranges are not the same)?
Does this position properly precede the given position pos
("properly" meaning their ranges
do not share a common point).
Does this position cover the same range as that position? Holds only if both position are ranges
An optional value containing the source file referred to by this position, or None if not defined.
The start of the position's range, error if not a range position
The start of the position's range, or point if not a range position
Convert this to a position around point
that spans a single source line
If this is a range, the union with the other range, with the point of this position.
If this is a range, the union with the other range, with the point of this position. Otherwise, this position
The same position with a different end value (if a range)
The same position with a different point value (if a range or offset)
The same position with a different source value, and its values shifted by given offset
The same position with a different start value (if a range)
The Position class and its subclasses represent positions of ASTs and symbols. Except for NoPosition and FakePos, every position refers to a SourceFile and to an offset in the sourcefile (its
point'). For batch compilation, that's all. For interactive IDE's there are also RangePositions and TransparentPositions. A RangePosition indicates a start and an end in addition to its point. TransparentPositions are a subclass of RangePositions. Range positions that are not transparent are called opaque. Trees with RangePositions need to satisfy the following invariants.
INV1: A tree with an offset position never contains a child with a range position INV2: If the child of a tree with a range position also has a range position, then the child's range is contained in the parent's range. INV3: Opaque range positions of children of the same node are non-overlapping (this means their overlap is at most a single point).
The following tests are useful on positions:
pos.isDefined true if position is not a NoPosition nor a FakePosition pos.isRange true if position is a range pos.isOpaqueRange true if position is an opaque range
The following accessor methods are provided:
pos.source The source file of the position, which must be defined pos.point The offset of the position's point, which must be defined pos.start The start of the position, which must be a range pos.end The end of the position, which must be a range
There are also convenience methods, such as
pos.startOrPoint pos.endOrPoint pos.pointOrElse(default)
These are less strict about the kind of position on which they can be applied.
The following conversion methods are often used:
pos.focus converts a range position to an offset position, keeping its point; returns all other positions unchanged. pos.makeTransparent converts an opaque range position into a transparent one. returns all other positions unchanged.