Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: replace any type annotations in Lines #1408

Merged
merged 1 commit into from
Jun 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 24 additions & 20 deletions lib/lines.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ type LineInfo = {
readonly sliceEnd: number;
};

type MutableLineInfo = {
-readonly [K in keyof LineInfo]: LineInfo[K];
};

export class Lines {
public readonly length: number;
public readonly name: string | null;
Expand Down Expand Up @@ -176,7 +180,7 @@ export class Lines {
if (skipFirstLine && this.length === 1) return this;

const lines = new Lines(
this.infos.map(function (info: any, i: any) {
this.infos.map(function (info, i) {
if (info.line && (i > 0 || !skipFirstLine)) {
info = {
...info,
Expand All @@ -190,7 +194,7 @@ export class Lines {
if (this.mappings.length > 0) {
const newMappings = lines.mappings;
invariant(newMappings.length === 0);
this.mappings.forEach(function (mapping: any) {
this.mappings.forEach(function (mapping) {
newMappings.push(mapping.indent(width, skipFirstLine, true));
});
}
Expand All @@ -204,7 +208,7 @@ export class Lines {
}

const lines = new Lines(
this.infos.map(function (info: any) {
this.infos.map(function (info) {
if (info.line && !info.locked) {
info = {
...info,
Expand All @@ -218,7 +222,7 @@ export class Lines {
if (this.mappings.length > 0) {
const newMappings = lines.mappings;
invariant(newMappings.length === 0);
this.mappings.forEach(function (mapping: any) {
this.mappings.forEach(function (mapping) {
newMappings.push(mapping.indent(by));
});
}
Expand All @@ -236,7 +240,7 @@ export class Lines {
}

const lines = new Lines(
this.infos.map(function (info: any, i: any) {
this.infos.map(function (info, i) {
if (i > 0 && info.line && !info.locked) {
info = {
...info,
Expand All @@ -251,7 +255,7 @@ export class Lines {
if (this.mappings.length > 0) {
const newMappings = lines.mappings;
invariant(newMappings.length === 0);
this.mappings.forEach(function (mapping: any) {
this.mappings.forEach(function (mapping) {
newMappings.push(mapping.indent(by, true));
});
}
Expand All @@ -265,7 +269,7 @@ export class Lines {
}

return new Lines(
this.infos.map((info: any, i: any) => ({
this.infos.map((info, i) => ({
...info,
locked: i > 0,
})),
Expand All @@ -282,7 +286,7 @@ export class Lines {
return this.cachedTabWidth;
}

const counts: any[] = []; // Sparse array.
const counts: number[] = []; // Sparse array.
let lastIndent = 0;

for (let line = 1, last = this.length; line <= last; ++line) {
Expand Down Expand Up @@ -527,15 +531,15 @@ export class Lines {
} else {
invariant(start.line < end.line);
sliced[0] = sliceInfo(sliced[0], start.column);
sliced.push(sliceInfo(sliced.pop(), 0, end.column));
sliced.push(sliceInfo(sliced.pop()!, 0, end.column));
}

const lines = new Lines(sliced);

if (this.mappings.length > 0) {
const newMappings = lines.mappings;
invariant(newMappings.length === 0);
this.mappings.forEach(function (this: any, mapping: any) {
this.mappings.forEach(function (this: Lines, mapping) {
const sliced = mapping.slice(this, start, end);
if (sliced) {
newMappings.push(sliced);
Expand Down Expand Up @@ -618,9 +622,9 @@ export class Lines {

join(elements: (string | Lines)[]) {
const separator = this;
const infos: any[] = [];
const mappings: any[] = [];
let prevInfo: any;
const infos: LineInfo[] = [];
const mappings: Mapping[] = [];
let prevInfo: MutableLineInfo | undefined;

function appendLines(linesOrNull: Lines | null) {
if (linesOrNull === null) {
Expand Down Expand Up @@ -648,15 +652,15 @@ export class Lines {
prevInfo.sliceEnd = prevInfo.line.length;

if (linesOrNull.mappings.length > 0) {
linesOrNull.mappings.forEach(function (mapping: any) {
linesOrNull.mappings.forEach(function (mapping) {
mappings.push(mapping.add(prevLine, prevColumn));
});
}
} else if (linesOrNull.mappings.length > 0) {
mappings.push.apply(mappings, linesOrNull.mappings);
}

linesOrNull.infos.forEach(function (info: any, i: any) {
linesOrNull.infos.forEach(function (info, i) {
if (!prevInfo || i > 0) {
prevInfo = { ...info };
infos.push(prevInfo);
Expand All @@ -670,7 +674,7 @@ export class Lines {
}

elements
.map(function (elem: any) {
.map(function (elem) {
const lines = fromString(elem);
if (lines.isEmpty()) return null;
return lines;
Expand Down Expand Up @@ -700,11 +704,11 @@ export class Lines {
}
}

const fromStringCache: any = {};
const fromStringCache: Record<string, Lines> = {};
const hasOwn = fromStringCache.hasOwnProperty;
const maxCacheKeyLen = 10;

export function countSpaces(spaces: any, tabWidth?: number) {
export function countSpaces(spaces: string, tabWidth?: number) {
let count = 0;
const len = spaces.length;

Expand Down Expand Up @@ -794,7 +798,7 @@ function isOnlyWhitespace(string: string) {
return !/\S/.test(string);
}

function sliceInfo(info: any, startCol: number, endCol?: number) {
function sliceInfo(info: LineInfo, startCol: number, endCol?: number) {
let sliceStart = info.sliceStart;
let sliceEnd = info.sliceEnd;
let indent = Math.max(info.indent, 0);
Expand Down Expand Up @@ -848,7 +852,7 @@ function sliceInfo(info: any, startCol: number, endCol?: number) {
};
}

export function concat(elements: any) {
export function concat(elements: (string | Lines)[]) {
return emptyLines.join(elements);
}

Expand Down
50 changes: 27 additions & 23 deletions test/lines.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,20 @@ import fs from "fs";
import path from "path";
import { fromString, concat, countSpaces, Lines } from "../lib/lines";
import { EOL as eol } from "os";
import { namedTypes } from "ast-types";

function check(a: any, b: any) {
assert.strictEqual(
a.toString({
lineTerminator: eol,
}),
b.toString({
lineTerminator: eol,
}),
);
type LinesInput = string | Lines;

function toString(s: LinesInput): string {
if (typeof s === "string") {
return s;
}

return s.toString({ lineTerminator: eol });
}

function check(a: LinesInput, b: LinesInput) {
assert.strictEqual(toString(a), toString(b));
}

describe("lines", function () {
Expand All @@ -37,7 +41,7 @@ describe("lines", function () {
});

it("FromString", function () {
function checkIsCached(s: any) {
function checkIsCached(s: LinesInput) {
assert.strictEqual(fromString(s), fromString(s));
check(fromString(s), s);
}
Expand Down Expand Up @@ -66,19 +70,19 @@ describe("lines", function () {
check(lines.indentTail(5).indentTail(-7).indentTail(2), code);
});

function testEachPosHelper(lines: any, code: any) {
function testEachPosHelper(lines: Lines, code: string) {
check(lines, code);

const chars: any[] = [];
const chars: string[] = [];
let emptyCount = 0;

function iterator(pos: any) {
function iterator(pos: namedTypes.Position) {
const ch = lines.charAt(pos);
if (ch === "") emptyCount += 1;
chars.push(ch);
}

lines.eachPos(iterator, null);
lines.eachPos(iterator, undefined);

// The character at the position just past the end (as returned by
// lastPos) should be the only empty string.
Expand All @@ -94,7 +98,7 @@ describe("lines", function () {

const withoutSpaces = code.replace(/\s+/g, "");
chars.length = emptyCount = 0;
lines.eachPos(iterator, null, true); // Skip spaces this time.
lines.eachPos(iterator, undefined, true); // Skip spaces this time.
assert.strictEqual(emptyCount, 0);
joined = chars.join("");
assert.strictEqual(joined.length, withoutSpaces.length);
Expand Down Expand Up @@ -123,7 +127,7 @@ describe("lines", function () {
const code = String(CharAtTest).replace(/\r\n/g, "\n");
const lines = fromString(code);

function compare(pos: any) {
function compare(pos: namedTypes.Position) {
assert.strictEqual(lines.charAt(pos), lines.bootstrapCharAt(pos));
}

Expand All @@ -133,7 +137,7 @@ describe("lines", function () {
indented = original.indentTail(4),
reference = fromString(" ab" + eol + " c");

function compareIndented(pos: any) {
function compareIndented(pos: namedTypes.Position) {
const c = indented.charAt(pos);
check(c, reference.charAt(pos));
check(c, indented.bootstrapCharAt(pos));
Expand Down Expand Up @@ -197,7 +201,7 @@ describe("lines", function () {
});

it("Empty", function () {
function c(s: any) {
function c(s: LinesInput) {
const lines = fromString(s);
check(lines, s);
assert.strictEqual(lines.isEmpty(), s.length === 0);
Expand Down Expand Up @@ -254,9 +258,9 @@ describe("lines", function () {
checkAllSlices(lines);
});

function checkAllSlices(lines: any) {
lines.eachPos(function (start: any) {
lines.eachPos(function (end: any) {
function checkAllSlices(lines: Lines) {
lines.eachPos(function (start) {
lines.eachPos(function (end) {
check(lines.slice(start, end), lines.bootstrapSlice(start, end));
check(
lines.sliceString(start, end),
Expand All @@ -266,15 +270,15 @@ describe("lines", function () {
});
}

function getSourceLocation(lines: any) {
function getSourceLocation(lines: Lines) {
return { start: lines.firstPos(), end: lines.lastPos() };
}

it("GetSourceLocation", function GetSourceLocationTest() {
const code = String(GetSourceLocationTest),
lines = fromString(code);

function verify(indent: any) {
function verify(indent: number) {
const indented = lines.indentTail(indent),
loc = getSourceLocation(indented),
string = indented.toString(),
Expand Down
Loading