non-canonical

The code can be read but is not written in canonical form.

compile error, shown by synod check.

Synod has one spelling for each meaning. If a file is parseable but spelled another way, the compiler reports non-canonical. Examples are require lines that are not sorted, settings of message … with out of field order, a name that must start lower-case, CR LF line endings, and a package's own qualifier used inside the package.

You do not fix these by hand. Run synod fmt and it rewrites the file into canonical form.

Example

Check this program to see the diagnostic.

# package p
Promise has
  set number to 0
  set prior to 0

define Make
  result (message Promise with prior 1, number 2)

Diagnostic

p/p.synod:7:32: error[non-canonical]: line is not canonical
  hint: write "  result (message Promise with number 2, prior 1)"

Fix

Write the settings in the order the fields are declared, or let `synod fmt` do it.

# package p
Promise has
  set number to 0
  set prior to 0

define Make
  result (message Promise with number 2, prior 1)