eslint-plugin-complete
Version:
An ESLint plugin that contains useful rules.
55 lines (54 loc) • 1.93 kB
JavaScript
import { ASTUtils, ESLintUtils } from "@typescript-eslint/utils";
/** Taken from ESLint: https://github.com/eslint/eslint/blob/main/lib/rules/max-len.js */
const URL_REGEXP = /[^:/?#]:\/\/[^?#]/u;
export function areStringsEqualExcludingTrailingSpaces(string1, string2) {
const string1Lines = string1.split("\n");
const string2Lines = string2.split("\n");
if (string1Lines.length !== string2Lines.length) {
return false;
}
// eslint-disable-next-line unicorn/no-for-loop
for (let i = 0; i < string1Lines.length; i++) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const line1 = string1Lines[i];
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const line2 = string2Lines[i];
if (line1.trimEnd() !== line2.trimEnd()) {
return false;
}
}
return true;
}
/** @see https://typescript-eslint.io/developers/custom-rules#extra-rule-docs-types */
// eslint-disable-next-line new-cap
export const createRule = ESLintUtils.RuleCreator((ruleName) => `https://complete-ts.github.io/eslint-plugin-complete/rules/${ruleName}`);
/**
* From: https://stackoverflow.com/questions/13627308/add-st-nd-rd-and-th-ordinal-suffix-to-a-number
*/
export function getOrdinalSuffix(i) {
const j = i % 10;
const k = i % 100;
if (j === 1 && k !== 11) {
return `${i}st`;
}
if (j === 2 && k !== 12) {
return `${i}nd`;
}
if (j === 3 && k !== 13) {
return `${i}rd`;
}
return `${i}th`;
}
export function getParentFunction(node) {
let parent = node;
while (parent !== undefined) {
parent = parent.parent; // eslint-disable-line @typescript-eslint/prefer-destructuring
if (ASTUtils.isFunction(parent)) {
return parent;
}
}
return undefined;
}
export function hasURL(text) {
return URL_REGEXP.test(text);
}