fml-check 0.1.0

Type checker for the FHIR Mapping Language: element paths, types, variables and group calls
Documentation
# fml-check

Type checker for the [FHIR Mapping Language](https://build.fhir.org/ig/HL7/mapping-language-ig/):
finds what a map gets wrong before it runs.

It follows every rule with the types of its variables and reports:

- elements that do not exist on the type they are read from or written to, including inherited
  ones, backbone elements and content references (`Questionnaire.item.item`);
- type annotations that are not a type of the element (`src.deceased : string`);
- unknown variables and writes into source variables;
- unknown or abstract types in `create('Type')`, and transforms with the wrong number of arguments;
- calls to groups that are not declared, or with the wrong number of arguments;
- element paths inside FHIRPath (`where`, `check`, `(…)`), as warnings, since a wrong path there
  gives an empty result instead of an error.

Groups without parameter types are checked with the types they are called with, which is how the
cross-version maps are written. Those maps (R2–R5) check clean; on other public maps it found a
typo in the FHIR test cases, a parameter a group uses without declaring it, and a condition that is
never true because it reads `system` and `code` from a CodeableConcept instead of its codings.

Definitions come through a small `Definitions` trait. With the `fhirschema` feature,
`CoreDefinitions` provides FHIR R4, R4B, R5 and R6 (6.0.0-ballot5), including the
version-specific URLs the cross-version maps use (`http://hl7.org/fhir/4.0/StructureDefinition/…`).
`PackageDefinitions` puts the StructureDefinitions of FHIR packages (profiles, extensions, logical
models) in front of them.

```rust
use fml_check::{CoreDefinitions, Release, check};

let parse = fml_syntax::parse(source);
for diagnostic in check(&parse.tree(), &CoreDefinitions::new(Release::R5)) {
    eprintln!("{:?}: {}", diagnostic.severity, diagnostic.message);
}
```

Part of [fml-rs](https://github.com/octofhir/fml-rs). Licensed under MIT or Apache-2.0.