Commit graph

301 commits

Author SHA1 Message Date
Marc Durdin
9080d156dc chore(developer): use 'statement' instead of 'command' for messages about kmn statements
In compiler messages, for a long time we have inconsistently used
'command' instead of 'statement' when referring to kmn statements. The
kmn language documentation uses 'statement' fairly consistently.
2025-03-22 05:58:06 +07:00
Marc Durdin
5683b370fe fix(developer): add validation of nul usage in output part of rule
If `nul` is used in the output part of a rule, then text or
text-emitting statements cannot also be included in the output of that
rule. This was not enforced in earlier versions of Keyman.

Adds a unit test for the enhanced validation.

Fixes: #13455
Relates-to: keymanapp/keyboards#3379
2025-03-18 09:54:06 +07:00
Marc Durdin
a04e977749 fix(developer): include nul in offset calculations for kmw v10 compiler
The cached context comparison for v10 kmw compiler includes the `nul`
statement, unlike the comparison in the earlier compiler. This
difference was missed in earlier iterations including the recent patch
in #13003. This patch fixes the problem for both `context(n)` and
`index(store,n)` offset calculations.

Fixes: #13306
Fixes: #13307
Follows: #13003
2025-02-23 16:25:51 +01:00
Marc Durdin
4a797d0e5a fix(developer): verify context(n) offsets are valid in kmcmplib
Add validity checks to kmcmplib to verify that offsets provided to
`context(n)` are in range for the context, and do not point to
non-character elements (`nul` and `if`) in the context string.

Fixes: #13301
Fixes: #13302
Relates-to: #13299
Relates-to: #13276
2025-02-21 09:58:26 +07:00
Marc Durdin
bd4633333b feat(developer): improve compiler messages and user interface
* Add unit test to verify the format of message detail strings
  (max line length of 80 chars)
* Add unit test to verify non-null, non-empty message strings
* Tidy up a number of messages (to pass unit tests)
* Add message details for all kmw compiler messages
* Add a clickable link for the TIKE message window for each message
  so that explanations and further message details are more accessible
  to authors (`kmc message` is already available for command-line users)
* Fixes a number of minor issues with the messages window in TIKE,
  mostly relating to when popup menu commands are enabled and how
  messages are selected.

Fixes: #13134
2025-02-07 08:46:46 +07:00
Marc Durdin
71ce8d6c91 chore(developer): extend notany tests in kmc-kmn 2025-01-24 08:56:21 +07:00
Marc Durdin
4a99018f1b fix(developer): produce correct index parameter value for context in kmw compiler
The KMW compiler would produce incorrect indices for the corresponding
character in the context after adjusting for the presence of `nul` and
`if` statements at the start of the context string, when using the
`context` and `context(n)` statements in the output.

This fix addresses the offset calculation for those scenarios and adds a
unit test to verify that the new offsets are correct.

Fixes: #12980
2025-01-23 14:20:31 +07:00
Marc Durdin
74f4392d75 fix(developer): detect invalid key ids in touch layout files
Fixes: #12870
2025-01-15 09:59:50 +07:00
Marc Durdin
4202f46550 fix(developer): support hint property in displaymap
Fixes: #12795
2024-12-09 12:20:53 +07:00
Marc Durdin
cd8825d504
Merge pull request #12736 from keymanapp/refactor/developer/unify_test_action
refactor(developer): unify test action
2024-12-01 00:14:11 +01:00
Eberhard Beilharz
66404f9503
chore(developer): rename test files
This change rename the test files for Developer according to the
discussion at the Keyman conference in November 2024.
2024-11-28 14:32:09 +01:00
Eberhard Beilharz
badb23a6ab
Merge pull request #12710 from keymanapp/refactor/developer/tc_tests
refactor(developer): output number of tests when running on TC
2024-11-28 19:40:52 +07:00
Marc Durdin
70a32f00d7 refactor(developer): unify test action 2024-11-28 15:16:25 +07:00
Eberhard Beilharz
21736d8817
refactor(developer): output number of tests when running on TC
This change adds the mocha-teamcity-reporter which outputs the running
tests in a special format that TeamCity can interpret. This allows TC
to show which tests run as well as the number of tests run.

Also refactor some of the build scripts to use functions.

Note that we had to explicitly add `--check-coverage=false` (which is the
default) to get successful builds when we run on TC.
2024-11-27 11:41:06 +01:00
Marc Durdin
e388361e84
Merge pull request #12713 from keymanapp/refactor/common/LdmlKeyboardTypes
refactor(common): move remaining LDML keyboard types into `LdmlKeyboardTypes`
2024-11-27 07:21:06 +01:00
Marc Durdin
b54b005830 refactor(common): move remaining LDML keyboard types into LdmlKeyboardTypes
Follows: #12712
2024-11-27 11:52:53 +07:00
Dr Mark C. Sinclair
c6ef37fdef chore(developer): remove ERROR_XXXInVirtualKeySection from kmn-compiler-messages.ts 2024-11-26 06:57:44 +00:00
Marc Durdin
78999fb7bc
Merge pull request #12588 from keymanapp/feat/developer/12505-report-key-address-in-layout-compiler
feat(developer): Report key 'address' in validation failures in layout compiler
2024-11-07 07:06:51 +01:00
Marc Durdin
6002024525 chore(developer): add address to Error_TouchLayoutInvalidIdentifier message 2024-11-07 07:27:02 +07:00
Marc Durdin
55e3f73a36 fix(developer): handle missing files in kmc-kmn
If a file is not found, the loadfile callback now returns an empty array
rather than null, which kmcmplib interprets as a missing file. This
means a zero-byte file will have the same outcome but as it is also
generally invalid, I think that is acceptable.

Fixes: #12546
Fixes: KEYMAN-DEVELOPER-292
2024-10-31 09:08:44 +07:00
Marc Durdin
91fc7f99bd chore(developer): fix import path 2024-10-30 13:11:42 +07:00
Marc Durdin
a38f46040e feat(developer): Report key 'address' in validation failures in layout compiler
All messages that reference keys in the touch layout will now give the
row+column index of the key with the issue (and longpress/flick/multitap
index as well if relevant).

Fixes: #12505
2024-10-30 12:34:15 +07:00
Eberhard Beilharz
1fe6a0370f
refactor(web): move common/web/eslintcommon/tools/eslint
Fixes: #12386
2024-09-10 19:16:52 +02:00
Marc Durdin
86fd36a713
Merge pull request #12117 from keymanapp/chore/developer/build-ci-linux-mac
chore(developer): start building Developer on linux,mac
2024-08-09 18:57:38 +10:00
Marc Durdin
38bb33d744 chore(developer): ignore line endings in kmw unit test 2024-08-07 12:32:01 +07:00
Marc Durdin
32b4711659
Merge branch 'master' into refactor/common/9665-move-compiler-interfaces-to-developer 2024-08-07 15:15:45 +10:00
Marc Durdin
ed143fb333
Merge branch 'master' into refactor/common/9665-move-ldml-keyboard-source-file-to-developer 2024-08-07 15:15:04 +10:00
Marc Durdin
ec72245575
Merge pull request #11765 from keymanapp/refactor/common/9665-move-keyman-touch-layout-file-to-developer
refactor(common): move .keyman-touch-layout reader/writer to @keymanapp/developer-utils 🐉
2024-08-07 15:14:06 +10:00
Marc Durdin
e9d054ab2c
Merge branch 'master' into refactor/common/9665-move-kvk-file-to-developer 2024-08-07 15:13:41 +10:00
Marc Durdin
e67aed1606 refactor(common): move compiler-interfaces to @keymanapp/developer-utils
This should be the last step in the refactoring.

Fixes: #9665
2024-08-02 13:49:59 +07:00
Marc Durdin
d3d3ac1eec refactor(common): move LDML keyboard .xml reader/writer and kmx-plus builder to @keymanapp/developer-utils
Relates-to: #9665
2024-08-02 10:23:11 +07:00
Marc Durdin
924b1aad78 refactor(common): use developer-utils, not common-types for TouchLayoutFileReader/Writer 2024-08-01 12:38:28 +07:00
Marc Durdin
53551f5662
Merge branch 'refactor/common/9665-move-kps-file-type-to-developer' into refactor/common/9665-move-kvk-file-to-developer 2024-08-01 10:35:33 +10:00
Marc Durdin
d8986be12f refactor(common): merge master into branch 2024-08-01 07:07:07 +07:00
Marc Durdin
8cd97e5f5d refactor(developer): move kmcmplib message construction to kmc-kmn
* Remove compiler message definitions from kmcmplib
* Add parameterization to compiler message structures
* Translate parameters for existing parameterized messages (except for
  `ERROR_InvalidToken`, which requires a bigger refactor of
  `GetXStringImpl()` and many friends)
* Add columnNumber to message structures (not yet used in kmc-kmn)
* Add filename to message structures (not yet used in kmcmplib)
* Rename `INFO_Info` to `INFO_MinimumCoreEngineVersion` and
  `INFO_MinimumEngineVersion` to `INFO_MinimumWebEngineVersion`

Relates-to: #10866
2024-07-30 10:01:19 +07:00
Marc Durdin
d53b4c8322 test(developer): validate that messages in kmcmplib and kmc-kmn match
Add a unit test to verify that kmn_compiler_errors.h and
kmn-compiler-messages.ts have identical definitions for all errors in
kmcmplib. Then remove mismatched (and unused) messages identified by
this test.
2024-07-28 12:37:58 +07:00
Marc Durdin
6a48f5e550 refactor(developer): align kmcmplib error codes with kmc
Renames kmcmplib error codes to match those in kmc-kmn, and updates the
bitmasks accordingly. Adds a KmnCompilerMessages namespace so a trivial
enum can be declared without risk of clashes with other ERROR_ or
similar messages.
2024-07-28 11:45:03 +07:00
Marc Durdin
37e1a9d296 refactor(developer): improve the callbacks for kmcmplib
* Removes redundant calls
* Uses C++ classes on the interface side
* Removes global callbacks from the Javascript side

In preparation for cleanup of compiler messages
2024-07-26 15:55:44 +07:00
Marc Durdin
1afa4beb01 fix(developer): remove paths from tsconfig.json
Fixes: #12027
2024-07-26 06:59:45 +07:00
Marc Durdin
db904b5617 fix(developer): cleanup package.json and build.sh errant references
During analysis of root causes for #12027, discovered a few package
relationship issues in package.json and build.sh.

analyzer-messages.ts ///<reference> is a mitigation for now.

Relates-to: #12027
2024-07-26 06:57:32 +07:00
Marc Durdin
b0c7147dfa
Merge pull request #12000 from keymanapp/feat/developer/10666-hint-on-index-store-longer-than-any
feat(developer): add hint when index() store is longer than any() store
2024-07-25 17:45:58 +10:00
Marc Durdin
12f9af5a59 chore(developer): address review comments 2024-07-25 12:21:39 +07:00
Marc Durdin
5d0dccf088
Merge pull request #11986 from keymanapp/chore/developer/remove-CompilerMessages-stub
chore(developer): remove `CompilerMessages` stub and use `KmnCompilerMessages`
2024-07-25 14:09:36 +10:00
Marc Durdin
09a1ad7b69 feat(developer): add hint when index() store is longer than any() store
While it does not cause any problems to have a index() store that is
longer than its corresponding any() store, it often indicates a mistake,
as the trailing characters in the store are ignored. Thus, adding as a
hint (which can be disabled via message suppression) rather than as a
warning or error.

Example code:
    store(abc) 'abc'
    store(defg) 'defg'
    any(abc) + 'x' > index(defg, 1)  c generates HINT_IndexStoreLong

Fixes: #10666
2024-07-24 07:35:31 +07:00
Marc Durdin
044605486b
Merge pull request #11983 from keymanapp/refactor/developer/11966-rename-verifyMinimumKeymanVersion
refactor(developer): rename `verifyMinimumKeymanVersion`
2024-07-23 18:12:23 +10:00
Marc Durdin
138fef93cc
Merge pull request #11982 from keymanapp/feat/developer/11961-handle-auto-versioning-of-gestures
feat(developer): automatically upgrade version when gestures are found in the touch layout
2024-07-23 18:12:13 +10:00
Marc Durdin
97f09a3341
Merge pull request #11981 from keymanapp/feat/developer/11960-handle-auto-versioning-of-special-key-caps-on-normal-keys
feat(developer): handle automatic versioning of special key caps on normal keys
2024-07-23 18:12:02 +10:00
Marc Durdin
b628e2e0c1
Merge pull request #11980 from keymanapp/feat/developer/11959-handle-auto-versioning-of-notany
test(developer): Add tests for automatic versioning of notany() with context()
2024-07-23 18:11:54 +10:00
Marc Durdin
227e05ee08
Merge pull request #11965 from keymanapp/feat/developer/11958-handle-auto-versioning-of-chiral-modifiers
feat(developer): handle automatic versioning of chiral modifiers
2024-07-23 18:11:44 +10:00
Marc Durdin
d6010ce8f9
Merge pull request #11957 from keymanapp/fix/developer/handle-auto-versioning-of-u_xxxx_yyyy
feat(developer): automatically detect version for `U_xxxx_yyyy` ids
2024-07-23 18:11:37 +10:00