Skip to content
Topaz6.0 · Before release
Download

Search documentation

Specification 6.0 · Not released · Tested product 5.21.3

Use arrow keys to choose a result. Press Enter to open.

Type an API name, diagnostic number, rule, or project topic.

    Diagnostics

    TPZ0007 Source name is not NFC

    A source name outside Unicode 16.0.0 NFC produces TPZ0007 during lexing.

    Diagnostic and cause

    Link

    Source name is not NFC

    Family
    topaz
    Phase
    lex
    Code
    TPZ0007

    Cause and conditions

    The complete name must already be in Unicode 16.0.0 NFC form in the source. This applies to declarations, references, members, fields, label bodies, and template tag names. Check the whole sequence before keyword or tag classification.

    Bindings and lookup compare the admitted scalar sequence exactly. They do not normalize a spelling silently or create a second alias. NFC uses canonical equivalence. It does not apply compatibility normalization or case folding.

    A non-NFC name produces TPZ0007 during lex. Mark the complete name span, excluding a label's apostrophe and a tag's string delimiter, and suggest its NFC spelling. Review the replacement for collisions before changing the source.

    Response

    Replace the complete name with its Unicode 16.0.0 NFC spelling. Apply the reviewed spelling consistently to its declaration and references. Report the original name span and suggest the NFC replacement. Do not silently add a lookup alias.

    Source evidence

    Topaz 6.0.0 specifies this diagnostic during lex.

    The target message is source name café is not NFC.

    The pinned SELF source does not emit this diagnostic.

    Source names must already use Unicode 16.0.0 NFC spelling. Reject a non-NFC name during lexing before keyword and tag classification. Report the complete original name span. Exclude a label prefix or string delimiter from that span. Suggest the NFC spelling without adding a lookup alias. Strings retain their exact scalars. The name rule defines accepted source spelling.

    Rulediagnostics.tpz0007.p5.rule

    Source name is not NFC

    Source names must already use Unicode 16.0.0 NFC spelling. Reject a non-NFC name during lexing before keyword and tag classification. Report the complete original name span. Exclude a label prefix or string delimiter from that span. Suggest the NFC spelling without adding a lookup alias. Strings retain their exact scalars. The name rule defines accepted source spelling.

    Why

    This applies the adopted identifier-normalization.1 decision. The language chapter owns the rejection condition and source span.

    Source evidence

    Response

    Link

    Replace the complete name with its Unicode 16.0.0 NFC spelling. Apply the reviewed spelling consistently to its declaration and references. Report the original name span and suggest the NFC replacement. Do not silently add a lookup alias.

    Reproduction and verification

    Link

    Rejected program

    Link
    example.tpzRejected programOpen in Playground
    1. let café = 1
    Expected outputNonzero exit
    No stdout.
    $ topaz check example.tpz · target product 5.21.3
    Expected result

    Expected result

    Rejection during lex. Nonzero exit.

    • TPZ0007 identifier-not-nfc at example.tpz:1:5

    The matcher describes a Topaz 6.0 target message. Public Topaz 5.21.3 does not implement this diagnostic producer.

    Source evidence

    Repaired program

    Link
    example.tpzRepaired program
    1. let café: int = 1
    2. let 가: int = 2
    3. let K: int = 3
    4. let value: int = café + 가 + K
    Expected outputexit 0
    $ topaz check example.tpz · target product 5.21.3
    Expected result

    Expected result

    Checking accepts the program. Exit code 0.

    The matcher describes a Topaz 6.0 target message. Public Topaz 5.21.3 does not implement this diagnostic producer.

    Source evidence

    Menu

    Download