signal-desktop/build/intl-linter/utils/rule.ts

38 lines
880 B
TypeScript
Raw Normal View History

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
import { Location } from '@formatjs/icu-messageformat-parser';
import type { Visitor } from './traverse';
import { traverse } from './traverse';
export type Element = MessageFormatElement;
export { Location };
export type Context = {
messageId: string;
report(
message: string,
location: Location | void,
locationOffset?: number
): void;
};
export type RuleFactory = {
(context: Context): Visitor;
};
export type Rule = {
id: string;
run(elements: Array<MessageFormatElement>, context: Context): void;
};
export function rule(id: string, ruleFactory: RuleFactory): Rule {
return {
id,
run(elements, context) {
traverse(null, elements, ruleFactory(context));
},
};
}