chore: Add eslint rule for no-shadow (#6658)
* chore: Add eslint rule for no-shadow * fix
This commit is contained in:
@@ -32,11 +32,19 @@
|
||||
"object-shorthand": "error",
|
||||
"no-mixed-operators": "off",
|
||||
"no-useless-escape": "off",
|
||||
"no-shadow": "off",
|
||||
"es/no-regexp-lookbehind-assertions": "error",
|
||||
"react/self-closing-comp": ["error", {
|
||||
"component": true,
|
||||
"html": true
|
||||
}],
|
||||
"@typescript-eslint/no-shadow": [
|
||||
"warn",
|
||||
{
|
||||
"hoist": "all",
|
||||
"ignoreTypeValueShadow": true
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/no-explicit-any": "warn",
|
||||
"@typescript-eslint/no-floating-promises": "error",
|
||||
"@typescript-eslint/await-thenable": "error",
|
||||
|
||||
@@ -390,7 +390,7 @@ export class Editor extends React.PureComponent<
|
||||
private createPasteParser() {
|
||||
return this.extensions.parser({
|
||||
schema: this.schema,
|
||||
rules: { linkify: true, emoji: false },
|
||||
rules: { linkify: true },
|
||||
plugins: this.rulePlugins,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -59,12 +59,9 @@ api.use(apiResponse());
|
||||
api.use(editor());
|
||||
|
||||
// Register plugin API routes before others to allow for overrides
|
||||
const plugins = PluginManager.getEnabledPlugins(PluginType.API).map(
|
||||
(plugin) => plugin.value
|
||||
PluginManager.getEnabledPlugins(PluginType.API).forEach((plugin) =>
|
||||
router.use("/", plugin.value.routes())
|
||||
);
|
||||
for (const plugin of plugins) {
|
||||
router.use("/", plugin.routes());
|
||||
}
|
||||
|
||||
// routes
|
||||
router.use("/", auth.routes());
|
||||
|
||||
@@ -22,8 +22,8 @@ export class PublicEnvironmentRegister {
|
||||
|
||||
static registerEnv(env: Environment) {
|
||||
process.nextTick(() => {
|
||||
const vars: string[] = Reflect.getMetadata(key, env);
|
||||
(vars ?? []).forEach((key: string) => {
|
||||
const vars: string[] = Reflect.getMetadata(key, env) ?? [];
|
||||
vars.forEach((key: string) => {
|
||||
if (isUndefined(this.publicEnv[key])) {
|
||||
this.publicEnv[key] = env[key];
|
||||
}
|
||||
|
||||
@@ -19,9 +19,9 @@ export default function fetch(
|
||||
): Promise<Response> {
|
||||
// In self-hosted, webhooks support proxying and are also allowed to connect
|
||||
// to internal services, so use fetchWithProxy without the filtering agent.
|
||||
const fetch = env.isCloudHosted ? nodeFetch : fetchWithProxy;
|
||||
const fetchMethod = env.isCloudHosted ? nodeFetch : fetchWithProxy;
|
||||
|
||||
return fetch(url, {
|
||||
return fetchMethod(url, {
|
||||
...init,
|
||||
agent: env.isCloudHosted ? useAgent(url) : undefined,
|
||||
});
|
||||
|
||||
@@ -32,12 +32,12 @@ if (env.isProduction) {
|
||||
const manifest = readManifestFile();
|
||||
|
||||
const returnFileAndImportsFromManifest = (
|
||||
manifest: ManifestStructure,
|
||||
manifestStructure: ManifestStructure,
|
||||
file: string
|
||||
): string[] => [
|
||||
manifest[file]["file"],
|
||||
...(manifest[file]["imports"] ?? []).map(
|
||||
(entry: string) => manifest[entry]["file"]
|
||||
manifestStructure[file]["file"],
|
||||
...(manifestStructure[file]["imports"] ?? []).map(
|
||||
(entry: string) => manifestStructure[entry]["file"]
|
||||
),
|
||||
];
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ export function CannotUseWithout(
|
||||
options: validationOptions,
|
||||
validator: {
|
||||
validate<T>(value: T, args: ValidationArguments) {
|
||||
const object = args.object as unknown as T;
|
||||
const obj = args.object as unknown as T;
|
||||
const required = args.constraints[0] as string;
|
||||
return object[required] !== undefined;
|
||||
return obj[required] !== undefined;
|
||||
},
|
||||
defaultMessage(args: ValidationArguments) {
|
||||
return `${propertyName} cannot be used without ${args.constraints[0]}.`;
|
||||
|
||||
@@ -84,7 +84,7 @@ export default function useDragResize(props: Props): ReturnValue {
|
||||
};
|
||||
|
||||
const handlePointerDown =
|
||||
(dragging: "left" | "right") =>
|
||||
(dragDirection: "left" | "right") =>
|
||||
(event: React.PointerEvent<HTMLDivElement>) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
@@ -93,7 +93,7 @@ export default function useDragResize(props: Props): ReturnValue {
|
||||
height: size.height,
|
||||
});
|
||||
setOffset(event.pageX);
|
||||
setDragging(dragging);
|
||||
setDragging(dragDirection);
|
||||
};
|
||||
|
||||
React.useEffect(() => {
|
||||
|
||||
@@ -134,7 +134,7 @@ export default class ExtensionManager {
|
||||
plugins,
|
||||
}: {
|
||||
schema: Schema;
|
||||
rules?: Record<string, any>;
|
||||
rules?: markdownit.Options;
|
||||
plugins?: PluginSimple[];
|
||||
}): MarkdownParser {
|
||||
const tokens = this.extensions
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import markdownit, { PluginSimple } from "markdown-it";
|
||||
|
||||
export default function rules({
|
||||
export default function makeRules({
|
||||
rules = {},
|
||||
plugins = [],
|
||||
}: {
|
||||
rules?: Record<string, any>;
|
||||
rules?: markdownit.Options;
|
||||
plugins?: PluginSimple[];
|
||||
}) {
|
||||
const markdownIt = markdownit("default", {
|
||||
|
||||
@@ -221,7 +221,7 @@ export class MarkdownSerializerState {
|
||||
})
|
||||
) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars
|
||||
const [_, lead, inner, trail] = /^(\s*)(.*?)(\s*)$/m.exec(node.text);
|
||||
const [, lead, inner, trail] = /^(\s*)(.*?)(\s*)$/m.exec(node.text);
|
||||
leading += lead;
|
||||
trailing = trail;
|
||||
if (lead || trail) {
|
||||
@@ -366,20 +366,20 @@ export class MarkdownSerializerState {
|
||||
row.forEach((cell, _, j) => {
|
||||
this.out += j === 0 ? "| " : " | ";
|
||||
|
||||
cell.forEach((node) => {
|
||||
cell.forEach((cellNode) => {
|
||||
// just padding the output so that empty cells take up the same space
|
||||
// as headings.
|
||||
// TODO: Ideally we'd calc the longest cell length and use that
|
||||
// to pad all the others.
|
||||
if (
|
||||
node.textContent === "" &&
|
||||
node.content.size === 0 &&
|
||||
node.type.name === "paragraph"
|
||||
cellNode.textContent === "" &&
|
||||
cellNode.content.size === 0 &&
|
||||
cellNode.type.name === "paragraph"
|
||||
) {
|
||||
this.out += " ";
|
||||
} else {
|
||||
this.closed = false;
|
||||
this.render(node, row, j);
|
||||
this.render(cellNode, row, j);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -28,11 +28,11 @@ export class SuggestionsMenuPlugin extends Plugin {
|
||||
// timeout ensures that the delete has been handled by prosemirror
|
||||
// and any characters removed, before we evaluate the rule.
|
||||
setTimeout(() => {
|
||||
const { pos } = view.state.selection.$from;
|
||||
const { pos: fromPos } = view.state.selection.$from;
|
||||
return this.execute(
|
||||
view,
|
||||
pos,
|
||||
pos,
|
||||
fromPos,
|
||||
fromPos,
|
||||
options.openRegex,
|
||||
action((_, match) => {
|
||||
if (match) {
|
||||
|
||||
@@ -11,7 +11,6 @@ function isHardbreak(token: Token) {
|
||||
export default function markdownBreakToParagraphs(md: MarkdownIt) {
|
||||
// insert a new rule after the "inline" rules are parsed
|
||||
md.core.ruler.after("inline", "breaks", (state) => {
|
||||
const { Token } = state;
|
||||
const tokens = state.tokens;
|
||||
|
||||
// work backwards through the tokens and find text that looks like a br
|
||||
@@ -30,8 +29,8 @@ export default function markdownBreakToParagraphs(md: MarkdownIt) {
|
||||
count++;
|
||||
}
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
const isLast = i === count - 1;
|
||||
for (let j = 0; j < count; j++) {
|
||||
const isLast = j === count - 1;
|
||||
|
||||
token = new Token("paragraph_open", "p", 1);
|
||||
nodes.push(token);
|
||||
|
||||
@@ -56,9 +56,9 @@ export default function markdownItCheckbox(md: MarkdownIt): void {
|
||||
|
||||
// work backwards through the tokens and find text that looks like a checkbox
|
||||
for (let i = tokens.length - 1; i > 0; i--) {
|
||||
const matches = looksLikeChecklist(tokens, i);
|
||||
if (matches) {
|
||||
const value = matches[1];
|
||||
const matchesChecklist = looksLikeChecklist(tokens, i);
|
||||
if (matchesChecklist) {
|
||||
const value = matchesChecklist[1];
|
||||
const checked = value.toLowerCase() === "x";
|
||||
|
||||
// convert surrounding list tokens
|
||||
|
||||
@@ -218,9 +218,9 @@ export enum NotificationChannelType {
|
||||
}
|
||||
|
||||
export type NotificationSettings = {
|
||||
[key in NotificationEventType]?:
|
||||
[event in NotificationEventType]?:
|
||||
| {
|
||||
[key in NotificationChannelType]?: boolean;
|
||||
[type in NotificationChannelType]?: boolean;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
@@ -35,14 +35,14 @@ export default class ProsemirrorHelper {
|
||||
* @param schema The schema to use.
|
||||
* @returns The document content as plain text without formatting.
|
||||
*/
|
||||
static toPlainText(node: Node, schema: Schema) {
|
||||
static toPlainText(root: Node, schema: Schema) {
|
||||
const textSerializers = Object.fromEntries(
|
||||
Object.entries(schema.nodes)
|
||||
.filter(([, node]) => node.spec.toPlainText)
|
||||
.map(([name, node]) => [name, node.spec.toPlainText])
|
||||
);
|
||||
|
||||
return textBetween(node, 0, node.content.size, textSerializers);
|
||||
return textBetween(root, 0, root.content.size, textSerializers);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -121,8 +121,8 @@ export function unicodeCLDRtoISO639(locale: string) {
|
||||
*
|
||||
* @returns The current date
|
||||
*/
|
||||
export function getCurrentDateAsString(locales?: Intl.LocalesArgument) {
|
||||
return new Date().toLocaleDateString(locales, {
|
||||
export function getCurrentDateAsString(locale?: Intl.LocalesArgument) {
|
||||
return new Date().toLocaleDateString(locale, {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
@@ -134,8 +134,8 @@ export function getCurrentDateAsString(locales?: Intl.LocalesArgument) {
|
||||
*
|
||||
* @returns The current time
|
||||
*/
|
||||
export function getCurrentTimeAsString(locales?: Intl.LocalesArgument) {
|
||||
return new Date().toLocaleTimeString(locales, {
|
||||
export function getCurrentTimeAsString(locale?: Intl.LocalesArgument) {
|
||||
return new Date().toLocaleTimeString(locale, {
|
||||
hour: "numeric",
|
||||
minute: "numeric",
|
||||
});
|
||||
@@ -147,8 +147,8 @@ export function getCurrentTimeAsString(locales?: Intl.LocalesArgument) {
|
||||
*
|
||||
* @returns The current date and time
|
||||
*/
|
||||
export function getCurrentDateTimeAsString(locales?: Intl.LocalesArgument) {
|
||||
return new Date().toLocaleString(locales, {
|
||||
export function getCurrentDateTimeAsString(locale?: Intl.LocalesArgument) {
|
||||
return new Date().toLocaleString(locale, {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
|
||||
@@ -44,8 +44,8 @@ export function getDataTransferFiles(
|
||||
return dt.items
|
||||
? Array.prototype.slice
|
||||
.call(dt.items)
|
||||
.filter((dt: DataTransferItem) => dt.kind !== "string")
|
||||
.map((dt: DataTransferItem) => dt.getAsFile())
|
||||
.filter((dti: DataTransferItem) => dti.kind !== "string")
|
||||
.map((dti: DataTransferItem) => dti.getAsFile())
|
||||
.filter(Boolean)
|
||||
: [];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user