mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
adbffc0734
* chore: clear mechanical lint warnings Drops 44 oxlint warnings (559 → 515) by fixing easy mechanical rules across the codebase: no-useless-escape, no-duplicate-type-constituents, no-redundant-type-constituents, no-unused-expressions, no-meaningless-void-operator, require-array-sort-compare, await-thenable. * chore: drop callback parameter from useCallback deps The `open` argument is a parameter of the callback, not a closed-over variable, so it doesn't belong in the deps array. * chore: promote cleared lint rules to errors Promotes the rules cleared in this PR from warn to error so future violations fail the lint: - no-unused-expressions - typescript/await-thenable - typescript/no-duplicate-type-constituents - typescript/no-meaningless-void-operator - typescript/require-array-sort-compare Removes the override that suppressed no-useless-escape on source files (the global rule is already error) and fixes the 21 escape violations that this exposed in regex character classes and template literals. * chore: address PR review feedback - usePinnedDocuments: simplify UrlId to plain string instead of the intersection trick. - PlantUML embed: move - to end of character class so it's a literal hyphen rather than a range operator. - checkboxes: type token params as Token | undefined to match the actual call sites that pass tokens[index - 2] etc.
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import Extension from "@shared/editor/lib/Extension";
|
||
import { InputRule } from "@shared/editor/lib/InputRule";
|
||
|
||
const rightArrow = new InputRule(/->$/, "→");
|
||
// Note that the suppression of pipe here prevents conflict with table creation rule.
|
||
const emdash = new InputRule(/(?:^|[^|])(--\s)$/, "— ");
|
||
const oneHalf = new InputRule(/(?:^|\s)(1\/2)$/, "½");
|
||
const threeQuarters = new InputRule(/(?:^|\s)(3\/4)$/, "¾");
|
||
const copyright = new InputRule(/\(c\)$/, "©️");
|
||
const registered = new InputRule(/\(r\)$/, "®️");
|
||
const trademarked = new InputRule(/\(tm\)$/, "™️");
|
||
const ellipsis = new InputRule(/\.\.\.$/, "…");
|
||
|
||
// Double quotes
|
||
const openDoubleQuote = new InputRule(/(?:^|[\s{[(<'"\u2018\u201C])(")$/, "“");
|
||
const closeDoubleQuote = new InputRule(/^(?!.*`)[\s\S]*(")$/, "”");
|
||
|
||
// Single quotes
|
||
const openSingleQuote = new InputRule(/(?:^|[\s{[(<'"\u2018\u201C])(')$/, "‘");
|
||
const closeSingleQuote = new InputRule(/^(?!.*`)[\s\S]*(')$/, "’");
|
||
|
||
export default class SmartText extends Extension {
|
||
get name() {
|
||
return "smart_text";
|
||
}
|
||
|
||
inputRules() {
|
||
if (this.options.userPreferences?.enableSmartText ?? true) {
|
||
return [
|
||
rightArrow,
|
||
emdash,
|
||
oneHalf,
|
||
threeQuarters,
|
||
copyright,
|
||
registered,
|
||
trademarked,
|
||
ellipsis,
|
||
openDoubleQuote,
|
||
closeDoubleQuote,
|
||
openSingleQuote,
|
||
closeSingleQuote,
|
||
];
|
||
}
|
||
|
||
return [];
|
||
}
|
||
}
|