Skip to main content

elm_ast/
ident.rs

1use crate::node::Spanned;
2
3/// An identifier — a name in Elm source code.
4///
5/// Elm distinguishes between lowercase identifiers (values, type variables)
6/// and uppercase identifiers (types, constructors, modules).
7pub type Ident = String;
8
9/// A module name: a dot-separated sequence of uppercase identifiers.
10///
11/// Example: `Html.Attributes` → `["Html", "Attributes"]`
12pub type ModuleName = Vec<Ident>;
13
14/// A qualified reference to a value or type.
15///
16/// Example: `Maybe.Just` → `QualifiedName { module_name: ["Maybe"], name: "Just" }`
17#[derive(Clone, Debug, PartialEq, Eq, Hash)]
18pub struct QualifiedName {
19    pub module_name: ModuleName,
20    pub name: Ident,
21}
22
23/// A spanned identifier.
24pub type SpannedIdent = Spanned<Ident>;
25
26/// A spanned module name.
27pub type SpannedModuleName = Spanned<ModuleName>;