diff --git a/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts b/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts
index 6cbfa8e161..749d44ed67 100644
--- a/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts
+++ b/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts
@@ -85,6 +85,7 @@ export class LdmlCompilerMessages {
`After minimization, one or more locales is repeated and has been removed`,
);
+ // This is the only allowed use of m() vs mx() in this file, all the others take context.
static ERROR_InvalidFile = SevError | 0x0007;
static Error_InvalidFile = (o:{errorText: string}) =>
m(this.ERROR_InvalidFile, `The source file has an invalid structure: ${def(o.errorText)}`);
@@ -306,8 +307,10 @@ export class LdmlCompilerMessages {
);
static ERROR_UnparseableReorderSet = SevError | 0x0028;
- static Error_UnparseableReorderSet = (o: { from: string, set: string }) =>
- m(this.ERROR_UnparseableReorderSet, `Illegal UnicodeSet "${def(o.set)}" in reorder "${def(o.from)}`);
+ static Error_UnparseableReorderSet = (o: { from: string, set: string }, x?: ObjectWithMetadata) => mx(
+ this.ERROR_UnparseableReorderSet, x,
+ `Illegal UnicodeSet "${def(o.set)}" in reorder "${def(o.from)}`,
+ );
static ERROR_InvalidVariableIdentifier = SevError | 0x0029;
static Error_InvalidVariableIdentifier = (o: { id: string }, x?: ObjectWithMetadata) => mx(
@@ -354,16 +357,18 @@ export class LdmlCompilerMessages {
// This is a bit of a catch-all and represents messages bubbling up from the underlying regex engine
static ERROR_UnparseableTransformFrom = SevErrorTransform | 0x00;
- static Error_UnparseableTransformFrom = (o: { from: string, message: string }) =>
- m(this.ERROR_UnparseableTransformFrom, `Invalid transform from="${def(o.from)}": "${def(o.message)}"`);
+ static Error_UnparseableTransformFrom = (o: { from: string, message: string }, x?: ObjectWithMetadata) => mx(
+ this.ERROR_UnparseableTransformFrom, x,
+ `Invalid transform from="${def(o.from)}": "${def(o.message)}"`,
+ );
//------------------------------------------------------------------------------|
// max length of detail message lines (checked by verifyCompilerMessagesObject) |
//------------------------------------------------------------------------------|
static ERROR_IllegalTransformDollarsign = SevErrorTransform | 0x01;
- static Error_IllegalTransformDollarsign = (o: { from: string }) => m(
- this.ERROR_IllegalTransformDollarsign,
+ static Error_IllegalTransformDollarsign = (o: { from: string }, x?: ObjectWithMetadata) => mx(
+ this.ERROR_IllegalTransformDollarsign, x,
`Invalid transform from="${def(o.from)}": Unescaped dollar-sign ($) is not valid transform syntax.`, `
**Hint**: Use \`\\$\` to match a literal dollar-sign. If this precedes a
variable name, the variable name may not be valid (A-Z, a-z, 0-9, _, 32
@@ -377,30 +382,30 @@ export class LdmlCompilerMessages {
);
static ERROR_IllegalTransformPlus = SevErrorTransform | 0x03;
- static Error_IllegalTransformPlus = (o: { from: string }) => m(
- this.ERROR_IllegalTransformPlus,
+ static Error_IllegalTransformPlus = (o: { from: string }, x?: ObjectWithMetadata) => mx(
+ this.ERROR_IllegalTransformPlus, x,
`Invalid transform from="${def(o.from)}": Unescaped plus (+) is not valid transform syntax.`, `
**Hint**: Use \`\\+\` to match a literal plus.
`);
static ERROR_IllegalTransformAsterisk = SevErrorTransform | 0x04;
- static Error_IllegalTransformAsterisk = (o: { from: string }) =>m(
- this.ERROR_IllegalTransformAsterisk,
+ static Error_IllegalTransformAsterisk = (o: { from: string }, x?: ObjectWithMetadata) =>mx(
+ this.ERROR_IllegalTransformAsterisk, x,
`Invalid transform from="${def(o.from)}": Unescaped asterisk (*) is not valid transform syntax.`, `
**Hint**: Use \`\\*\` to match a literal asterisk.
`);
static ERROR_IllegalTransformToUset = SevErrorTransform | 0x05;
- static Error_IllegalTransformToUset = (o: { to: string }) => m(
- this.ERROR_IllegalTransformToUset,
+ static Error_IllegalTransformToUset = (o: { to: string }, x?: ObjectWithMetadata) => mx(
+ this.ERROR_IllegalTransformToUset, x,
`Invalid transform to="${def(o.to)}": Set variable (\\$[…]) cannot be used in 'to=' unless part of a map.`, `
**Hint**: If a map was meant, must use the form
\`\`.
`);
static ERROR_UnparseableTransformTo = SevErrorTransform | 0x06;
- static Error_UnparseableTransformTo = (o: {to: string, message: string}) => m(
- this.ERROR_UnparseableTransformTo,
+ static Error_UnparseableTransformTo = (o: {to: string, message: string}, x?: ObjectWithMetadata) => mx(
+ this.ERROR_UnparseableTransformTo, x,
`Invalid transform to="${def(o.to)}": "${def(o.message)}"`,
);
diff --git a/developer/src/kmc-ldml/src/compiler/tran.ts b/developer/src/kmc-ldml/src/compiler/tran.ts
index f0db46336d..c6236c1be7 100644
--- a/developer/src/kmc-ldml/src/compiler/tran.ts
+++ b/developer/src/kmc-ldml/src/compiler/tran.ts
@@ -1,6 +1,6 @@
import { constants, SectionIdent } from "@keymanapp/ldml-keyboard-constants";
import { KMXPlus, LdmlKeyboardTypes, util } from '@keymanapp/common-types';
-import { CompilerCallbacks, LDMLKeyboard } from "@keymanapp/developer-utils";
+import { CompilerCallbacks, LDMLKeyboard, ObjectWithMetadata } from "@keymanapp/developer-utils";
import { SectionCompiler } from "./section-compiler.js";
import Bksp = KMXPlus.Bksp;
@@ -204,7 +204,7 @@ export abstract class TransformCompiler();
/** takes line numbers */
let lines = 0;
const fakeOffsetNumber = 1234;
const fakeOffsetObject = withOffset(fakeOffsetNumber);
for(const key of keys) {
- if(typeof m[key] == 'function') {
+ // exclude this one, does not need line numbers
+ if (key == 'Error_InvalidFile') continue;
+ if (typeof m[key] == 'function') {
total++;
const f = m[key] as Function;
// console.log(`${f.name}: ${f.length}`);
if (f.length === 0) { // Error_foo()
- noLines++;
+ noLines.add(key);
continue;
}
// now try to call it
@@ -42,16 +44,11 @@ describe('LdmlCompilerMessages', function () {
expect(resp.offset).to.equal(fakeOffsetNumber, `Offset number round trip for error ${f.name} did not work, check the message function`);
} else {
// did not get a column number back
- noLines++;
+ noLines.add(key);
}
}
}
expect(lines).to.not.be.equal(0, `None of ${total} messages had offset reporting.`);
- if (noLines > 0) {
- // Once this goes to zero, make it an error if it goes up!
- // Oh, and while you're here, once this is zero, uncomment the code in testCompilationCases
- // that asserts that all messages are actually generated with an offset.
- console.warn(`TODO-LDML (#10622) ${noLines}/${total} ${Number((noLines/total)*1000).toFixed(0)}‰ of message(s) did not have detectable offset (line number) reporting.`);
- }
+ expect(Array.from(noLines.values())).to.deep.equal([], `${noLines.size}/${total} ${Number((noLines.size/total)*100).toFixed(0)}% of message(s) did not have detectable offset (line number) reporting`);
});
});