mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-03 11:52:19 +00:00
Allow dots in import module names
We found some issues with the private submodules part of the proposal [1], and we decided to keep module directories for now. [1] https://docs.google.com/document/d/1E_77fO-44BtoBtXoVeWyGh1xN2KRTWTu8q6i25RNNx0/edit#heading=h.x84bh32l37em
This commit is contained in:
parent
b56f029a09
commit
3217e5a3f0
18 changed files with 109 additions and 52 deletions
|
@ -2972,7 +2972,7 @@ fn to_pending_value_def<'a>(
|
|||
}),
|
||||
|
||||
ModuleImport(module_import) => {
|
||||
let module_name = ModuleName::from(module_import.name.value.name);
|
||||
let module_name = ModuleName::from(module_import.name.value.name.as_str());
|
||||
let pq_module_name = QualifiedModuleName {
|
||||
opt_package: module_import.name.value.package,
|
||||
module: module_name.clone(),
|
||||
|
|
|
@ -305,7 +305,7 @@ impl<'a> Formattable for ImportedModuleName<'a> {
|
|||
buf.push_str(".");
|
||||
}
|
||||
|
||||
buf.push_str(self.name);
|
||||
self.name.format(buf, indent);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2387,7 +2387,6 @@ fn update<'a>(
|
|||
exposed_symbols.insert(*symbol);
|
||||
}
|
||||
|
||||
// [modules-revamp] TODO: revise this
|
||||
// NOTE we currently re-parse the headers when a module is imported twice.
|
||||
// We need a proper solution that marks a phase as in-progress so it's not repeated
|
||||
// debug_assert!(!state.exposed_symbols_by_module.contains_key(&home));
|
||||
|
@ -5214,7 +5213,7 @@ fn parse<'a>(
|
|||
ValueDef::ModuleImport(import) => {
|
||||
let qualified_module_name = QualifiedModuleName {
|
||||
opt_package: import.name.value.package,
|
||||
module: import.name.value.name.into(),
|
||||
module: import.name.value.name.as_str().into(),
|
||||
};
|
||||
|
||||
imported.push((qualified_module_name, *region));
|
||||
|
|
|
@ -2,7 +2,7 @@ use std::fmt::Debug;
|
|||
use std::path::Path;
|
||||
|
||||
use crate::header::{
|
||||
self, AppHeader, HostedHeader, InterfaceHeader, PackageHeader, PlatformHeader,
|
||||
self, AppHeader, HostedHeader, InterfaceHeader, ModuleName, PackageHeader, PlatformHeader,
|
||||
};
|
||||
use crate::ident::Accessor;
|
||||
use crate::parser::ESingleQuote;
|
||||
|
@ -11,7 +11,6 @@ use bumpalo::Bump;
|
|||
use roc_collections::soa::{EitherIndex, Index, Slice};
|
||||
use roc_error_macros::internal_error;
|
||||
use roc_module::called_via::{BinOp, CalledVia, UnaryOp};
|
||||
use roc_module::ident::ModuleName;
|
||||
use roc_region::all::{Loc, Position, Region};
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
|
@ -460,7 +459,7 @@ pub fn wrap_in_task_ok<'a>(arena: &'a Bump, loc_expr: &'a Loc<Expr<'a>>) -> &'a
|
|||
arena.alloc(Loc::at(
|
||||
loc_expr.region,
|
||||
Expr::Var {
|
||||
module_name: ModuleName::TASK,
|
||||
module_name: roc_module::ident::ModuleName::TASK,
|
||||
ident: "ok",
|
||||
suffixed: 0,
|
||||
},
|
||||
|
@ -893,7 +892,7 @@ impl header::Keyword for ImportExposingKeyword {
|
|||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
pub struct ImportedModuleName<'a> {
|
||||
pub package: Option<&'a str>,
|
||||
pub name: &'a str,
|
||||
pub name: ModuleName<'a>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
|
|
|
@ -12,6 +12,7 @@ use crate::ident::{
|
|||
integer_ident, lowercase_ident, parse_ident, unqualified_ident, uppercase_ident, Accessor,
|
||||
Ident,
|
||||
};
|
||||
use crate::module::module_name_help;
|
||||
use crate::parser::{
|
||||
self, backtrackable, byte, byte_indent, increment_min_indent, line_min_indent, optional,
|
||||
reset_min_indent, sep_by1, sep_by1_e, set_min_indent, specialize_err, specialize_err_ref, then,
|
||||
|
@ -957,7 +958,7 @@ fn imported_module_name<'a>() -> impl Parser<'a, ImportedModuleName<'a>, EImport
|
|||
specialize_err(|_, pos| EImport::PackageShorthand(pos), lowercase_ident()),
|
||||
byte(b'.', EImport::PackageShorthandDot)
|
||||
)),
|
||||
name: specialize_err(|_, pos| EImport::ModuleName(pos), uppercase_ident()),
|
||||
name: module_name_help(EImport::ModuleName)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -590,7 +590,7 @@ fn shortname<'a>() -> impl Parser<'a, &'a str, EImports> {
|
|||
specialize_err(|_, pos| EImports::Shorthand(pos), lowercase_ident())
|
||||
}
|
||||
|
||||
fn module_name_help<'a, F, E>(to_expectation: F) -> impl Parser<'a, ModuleName<'a>, E>
|
||||
pub fn module_name_help<'a, F, E>(to_expectation: F) -> impl Parser<'a, ModuleName<'a>, E>
|
||||
where
|
||||
F: Fn(Position) -> E,
|
||||
E: 'a,
|
||||
|
|
|
@ -19,7 +19,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @8-12 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: None,
|
||||
|
|
|
@ -37,7 +37,9 @@ Defs {
|
|||
package: Some(
|
||||
"json",
|
||||
),
|
||||
name: "Decode",
|
||||
name: ModuleName(
|
||||
"Decode",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: None,
|
||||
|
@ -50,7 +52,9 @@ Defs {
|
|||
package: Some(
|
||||
"json",
|
||||
),
|
||||
name: "Decode",
|
||||
name: ModuleName(
|
||||
"Decode",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -74,7 +78,9 @@ Defs {
|
|||
package: Some(
|
||||
"json",
|
||||
),
|
||||
name: "Decode",
|
||||
name: ModuleName(
|
||||
"Decode",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: Some(
|
||||
|
@ -108,7 +114,9 @@ Defs {
|
|||
package: Some(
|
||||
"json",
|
||||
),
|
||||
name: "Decode",
|
||||
name: ModuleName(
|
||||
"Decode",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
import JsonEncode as JE
|
||||
import BytesDecode as BD
|
||||
import Bytes.Decode as BD
|
||||
|
|
|
@ -5,7 +5,7 @@ Defs {
|
|||
],
|
||||
regions: [
|
||||
@0-23,
|
||||
@24-49,
|
||||
@24-50,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 0),
|
||||
|
@ -25,7 +25,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @7-17 ImportedModuleName {
|
||||
package: None,
|
||||
name: "JsonEncode",
|
||||
name: ModuleName(
|
||||
"JsonEncode",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -45,9 +47,11 @@ Defs {
|
|||
ModuleImport(
|
||||
ModuleImport {
|
||||
before_name: [],
|
||||
name: @31-42 ImportedModuleName {
|
||||
name: @31-43 ImportedModuleName {
|
||||
package: None,
|
||||
name: "BytesDecode",
|
||||
name: ModuleName(
|
||||
"Bytes.Decode",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -56,7 +60,7 @@ Defs {
|
|||
item: ImportAsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: @47-49 ImportAlias(
|
||||
item: @48-50 ImportAlias(
|
||||
"BD",
|
||||
),
|
||||
},
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
import JsonEncode as JE
|
||||
import BytesDecode as BD
|
||||
import Bytes.Decode as BD
|
||||
|
|
|
@ -100,7 +100,9 @@ Defs {
|
|||
],
|
||||
name: @25-29 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -135,7 +137,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @58-62 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -175,7 +179,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @109-113 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -202,7 +208,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @145-149 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -242,7 +250,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @196-200 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -290,7 +300,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @261-265 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: Some(
|
||||
|
@ -327,7 +339,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @321-325 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -367,7 +381,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @372-376 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: Some(
|
||||
|
@ -396,7 +412,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @418-422 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -436,7 +454,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @469-473 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -489,7 +509,9 @@ Defs {
|
|||
],
|
||||
name: @542-546 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -557,7 +579,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @682-683 ImportedModuleName {
|
||||
package: None,
|
||||
name: "A",
|
||||
name: ModuleName(
|
||||
"A",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: None,
|
||||
|
@ -568,7 +592,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @717-718 ImportedModuleName {
|
||||
package: None,
|
||||
name: "B",
|
||||
name: ModuleName(
|
||||
"B",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: None,
|
||||
|
|
|
@ -30,7 +30,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @7-11 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: Some(
|
||||
|
@ -57,7 +59,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @43-47 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: Some(
|
||||
|
@ -89,7 +93,9 @@ Defs {
|
|||
before_name: [],
|
||||
name: @83-87 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: Some(
|
||||
|
|
|
@ -6,7 +6,7 @@ Defs(
|
|||
],
|
||||
regions: [
|
||||
@0-26,
|
||||
@27-50,
|
||||
@27-51,
|
||||
],
|
||||
space_before: [
|
||||
Slice(start = 0, length = 0),
|
||||
|
@ -26,7 +26,9 @@ Defs(
|
|||
before_name: [],
|
||||
name: @7-11 ImportedModuleName {
|
||||
package: None,
|
||||
name: "Json",
|
||||
name: ModuleName(
|
||||
"Json",
|
||||
),
|
||||
},
|
||||
alias: None,
|
||||
exposed: Some(
|
||||
|
@ -48,9 +50,11 @@ Defs(
|
|||
ModuleImport(
|
||||
ModuleImport {
|
||||
before_name: [],
|
||||
name: @34-44 ImportedModuleName {
|
||||
name: @34-45 ImportedModuleName {
|
||||
package: None,
|
||||
name: "JsonEncode",
|
||||
name: ModuleName(
|
||||
"Json.Encode",
|
||||
),
|
||||
},
|
||||
alias: Some(
|
||||
KeywordItem {
|
||||
|
@ -59,7 +63,7 @@ Defs(
|
|||
item: ImportAsKeyword,
|
||||
after: [],
|
||||
},
|
||||
item: @48-50 ImportAlias(
|
||||
item: @49-51 ImportAlias(
|
||||
"JE",
|
||||
),
|
||||
},
|
||||
|
@ -69,23 +73,23 @@ Defs(
|
|||
),
|
||||
],
|
||||
},
|
||||
@52-70 SpaceBefore(
|
||||
@53-71 SpaceBefore(
|
||||
Apply(
|
||||
@52-61 Var {
|
||||
@53-62 Var {
|
||||
module_name: "JE",
|
||||
ident: "encode",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
@63-69 ParensAround(
|
||||
@64-70 ParensAround(
|
||||
Apply(
|
||||
@63-66 Var {
|
||||
@64-67 Var {
|
||||
module_name: "",
|
||||
ident: "int",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
@67-69 Num(
|
||||
@68-70 Num(
|
||||
"42",
|
||||
),
|
||||
],
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import Json exposing [int]
|
||||
import JsonEncode as JE
|
||||
import Json.Encode as JE
|
||||
|
||||
JE.encode (int 42)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue