Use an object type to represent Position

This commit is contained in:
Josh Gross
2023-01-27 15:43:52 -05:00
parent 91478bb5b6
commit c33fcbc83d
7 changed files with 29 additions and 20 deletions
@@ -500,11 +500,11 @@ class TemplateReader {
);
let tr = token.range!;
if (tr.start[0] === tr.end[0]) {
if (tr.start.line === tr.end.line) {
// If it's a single line expression, adjust the range to only cover the sub-expression
tr = {
start: [tr.start[0], tr.start[1] + startExpression],
end: [tr.end[0], tr.start[1] + endExpression + 1]
start: {line: tr.start.line, column: tr.start.column + startExpression},
end: {line: tr.end.line, column: tr.start.column + endExpression + 1}
};
} else {
// Adjust the range to only cover the expression for multi-line strings
@@ -515,8 +515,8 @@ class TemplateReader {
const adjustedEnd = endExpression - beginningOfLine + 1;
tr = {
start: [tr.start[0] + adjustedStartLine, adjustedStart],
end: [tr.start[0] + adjustedStartLine, adjustedEnd]
start: {line: tr.start.line + adjustedStartLine, column: adjustedStart},
end: {line: tr.start.line + adjustedStartLine, column: adjustedEnd}
};
}
@@ -42,11 +42,11 @@ export abstract class TemplateToken {
}
public get line(): number | undefined {
return this.range?.start[0];
return this.range?.start.line;
}
public get col(): number | undefined {
return this.range?.start[1];
return this.range?.start.column;
}
public get definition(): Definition | undefined {
@@ -1,4 +1,10 @@
export type Position = [line: number, character: number];
/** Represents the position within a template object */
export type Position = {
/** The one-based line value */
line: number;
/** The one-based column value */
column: number;
};
export type TokenRange = {
start: Position;
@@ -89,8 +89,8 @@ export class YamlObjectReader implements ObjectReader {
const elp = this.lineCounter.linePos(endPos);
return {
start: [slp.line, slp.col],
end: [elp.line, elp.col]
start: {line: slp.line, column: slp.col},
end: {line: elp.line, column: elp.col}
};
}
@@ -216,7 +216,7 @@ function rangeFromLinePos(linePos: [LinePos] | [LinePos, LinePos] | undefined):
return;
}
// TokenRange and linePos are both 1-based
const start: Position = [linePos[0].line, linePos[0].col];
const end: Position = linePos.length == 2 ? [linePos[1].line, linePos[1].col] : start;
const start: Position = {line: linePos[0].line, column: linePos[0].col};
const end: Position = linePos.length == 2 ? {line: linePos[1].line, column: linePos[1].col} : start;
return {start, end};
}