Skip to content

Commit 7bbfb44

Browse files
authored
Improve types (#116)
1 parent dba13cc commit 7bbfb44

2 files changed

Lines changed: 45 additions & 28 deletions

File tree

index.d.ts

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,41 @@
11
/**
22
* Converts invisible characters to a commonly recognizable visible form.
3-
* @param str - The string with invisibles to convert.
4-
* @returns The converted string.
3+
* @param {string} str - The string with invisibles to convert.
4+
* @returns {string} The converted string.
55
*/
66
export function showInvisibles(str: string): string;
77

8-
export interface Difference {
9-
operation: 'insert' | 'delete' | 'replace';
10-
offset: number;
11-
insertText?: string | undefined;
12-
deleteText?: string | undefined;
13-
}
8+
export type Difference =
9+
| {
10+
operation: 'insert';
11+
insertText: string;
12+
offset: number;
13+
}
14+
| {
15+
operation: 'delete';
16+
deleteText: string;
17+
offset: number;
18+
}
19+
| {
20+
operation: 'replace';
21+
insertText: string;
22+
deleteText: string;
23+
offset: number;
24+
};
1425

15-
export interface GenerateDifferences {
16-
/**
17-
* Generate results for differences between source code and formatted version.
18-
*
19-
* @param source - The original source.
20-
* @param prettierSource - The Prettier formatted source.
21-
* @returns An array containing { operation, offset, insertText, deleteText }
22-
*/
23-
(source: string, prettierSource: string): Difference[];
24-
INSERT: 'insert';
25-
DELETE: 'delete';
26-
REPLACE: 'replace';
26+
/**
27+
* Generate results for differences between source code and formatted version.
28+
*
29+
* @param {string} source - The original source.
30+
* @param {string} prettierSource - The Prettier formatted source.
31+
* @returns {Difference[]} - An array containing { operation, offset, insertText, deleteText }
32+
*/
33+
export function generateDifferences(
34+
source: string,
35+
prettierSource: string
36+
): Difference[];
37+
export namespace generateDifferences {
38+
let INSERT: 'insert';
39+
let DELETE: 'delete';
40+
let REPLACE: 'replace';
2741
}
28-
29-
export const generateDifferences: GenerateDifferences;

index.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ function showInvisibles(str) {
3131
return ret;
3232
}
3333

34+
/** @typedef {({operation: 'insert'; insertText: string; offset: number;} | {operation: 'delete'; deleteText: string; offset: number;} | {operation: 'replace'; insertText: string; deleteText: string; offset: number;})} Difference */
35+
3436
/**
3537
* Generate results for differences between source code and formatted version.
3638
*
3739
* @param {string} source - The original source.
3840
* @param {string} prettierSource - The Prettier formatted source.
39-
* @returns {Array} - An array containing { operation, offset, insertText, deleteText }
41+
* @returns {Difference[]} - An array containing { operation, offset, insertText, deleteText }
4042
*/
4143
function generateDifferences(source, prettierSource) {
4244
// fast-diff returns the differences between two texts as a series of
@@ -54,12 +56,15 @@ function generateDifferences(source, prettierSource) {
5456
// on contiguous lines).
5557

5658
const results = diff(source, prettierSource);
59+
60+
/** @type {Difference[]} */
5761
const differences = [];
5862

63+
/** @type {typeof results} */
5964
const batch = [];
6065
let offset = 0; // NOTE: INSERT never advances the offset.
6166
while (results.length) {
62-
const result = results.shift();
67+
const result = /** @type {typeof results[number]} */ (results.shift());
6368
const op = result[0];
6469
const text = result[1];
6570
switch (op) {
@@ -95,7 +100,7 @@ function generateDifferences(source, prettierSource) {
95100
let aheadDeleteText = '';
96101
let aheadInsertText = '';
97102
while (batch.length) {
98-
const next = batch.shift();
103+
const next = /** @type {typeof batch[number]} */ (batch.shift());
99104
const op = next[0];
100105
const text = next[1];
101106
switch (op) {
@@ -135,9 +140,9 @@ function generateDifferences(source, prettierSource) {
135140
}
136141
}
137142

138-
generateDifferences.INSERT = 'insert';
139-
generateDifferences.DELETE = 'delete';
140-
generateDifferences.REPLACE = 'replace';
143+
generateDifferences.INSERT = /** @type {const} */ ('insert');
144+
generateDifferences.DELETE = /** @type {const} */ ('delete');
145+
generateDifferences.REPLACE = /** @type {const} */ ('replace');
141146

142147
module.exports = {
143148
showInvisibles,

0 commit comments

Comments
 (0)