From c3123de737722926de9131bcfd2cb256e898c607 Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Sat, 29 Jan 2022 21:38:10 -0500 Subject: [PATCH] format hosted modules --- cli/src/format.rs | 23 +++++++++++++++++-- compiler/fmt/src/module.rs | 46 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/cli/src/format.rs b/cli/src/format.rs index 1c5b83c75c..365bb0034e 100644 --- a/cli/src/format.rs +++ b/cli/src/format.rs @@ -12,8 +12,8 @@ use roc_parse::ast::{ TypeAnnotation, WhenBranch, }; use roc_parse::header::{ - AppHeader, Effects, ExposedName, ImportsEntry, InterfaceHeader, ModuleName, PackageEntry, - PackageName, PlatformHeader, PlatformRequires, To, TypedIdent, + AppHeader, Effects, ExposedName, HostedHeader, ImportsEntry, InterfaceHeader, ModuleName, + PackageEntry, PackageName, PlatformHeader, PlatformRequires, To, TypedIdent, }; use roc_parse::{ ast::{Def, Module}, @@ -221,6 +221,25 @@ impl<'a> RemoveSpaces<'a> for Module<'a> { after_provides: &[], }, }, + Module::Hosted { header } => Module::Hosted { + header: HostedHeader { + name: header.name.remove_spaces(arena), + exposes: header.exposes.remove_spaces(arena), + imports: header.imports.remove_spaces(arena), + generates: header.generates.remove_spaces(arena), + generates_with: header.generates_with.remove_spaces(arena), + before_header: &[], + after_hosted_keyword: &[], + before_exposes: &[], + after_exposes: &[], + before_imports: &[], + after_imports: &[], + before_generates: &[], + after_generates: &[], + before_with: &[], + after_with: &[], + }, + }, } } } diff --git a/compiler/fmt/src/module.rs b/compiler/fmt/src/module.rs index 1b059cc7ad..9660d427fe 100644 --- a/compiler/fmt/src/module.rs +++ b/compiler/fmt/src/module.rs @@ -5,8 +5,8 @@ use crate::spaces::{fmt_default_spaces, fmt_spaces, INDENT}; use crate::Buf; use roc_parse::ast::{Collection, Module, Spaced}; use roc_parse::header::{ - AppHeader, Effects, ExposedName, ImportsEntry, InterfaceHeader, ModuleName, PackageEntry, - PackageName, PlatformHeader, PlatformRequires, To, TypedIdent, + AppHeader, Effects, ExposedName, HostedHeader, ImportsEntry, InterfaceHeader, ModuleName, + PackageEntry, PackageName, PlatformHeader, PlatformRequires, To, TypedIdent, }; use roc_parse::ident::UppercaseIdent; use roc_region::all::Loc; @@ -22,6 +22,9 @@ pub fn fmt_module<'a, 'buf>(buf: &mut Buf<'buf>, module: &'a Module<'a>) { Module::Platform { header } => { fmt_platform_header(buf, header); } + Module::Hosted { header } => { + fmt_hosted_header(buf, header); + } } } @@ -50,6 +53,45 @@ pub fn fmt_interface_header<'a, 'buf>(buf: &mut Buf<'buf>, header: &'a Interface fmt_imports(buf, header.imports, indent); } +pub fn fmt_hosted_header<'a, 'buf>(buf: &mut Buf<'buf>, header: &'a HostedHeader<'a>) { + let indent = INDENT; + + buf.indent(0); + buf.push_str("hosted"); + + // module name + fmt_default_spaces(buf, header.after_hosted_keyword, indent); + buf.push_str(header.name.value.as_str()); + + // exposes + fmt_default_spaces(buf, header.before_exposes, indent); + buf.indent(indent); + buf.push_str("exposes"); + fmt_default_spaces(buf, header.after_exposes, indent); + fmt_exposes(buf, header.exposes, indent); + + // imports + fmt_default_spaces(buf, header.before_imports, indent); + buf.indent(indent); + buf.push_str("imports"); + fmt_default_spaces(buf, header.after_imports, indent); + fmt_imports(buf, header.imports, indent); + + // generates + fmt_default_spaces(buf, header.before_generates, indent); + buf.indent(indent); + buf.push_str("generates"); + fmt_default_spaces(buf, header.after_generates, indent); + buf.push_str(header.generates.into()); + + // with + fmt_default_spaces(buf, header.before_with, indent); + buf.indent(indent); + buf.push_str("with"); + fmt_default_spaces(buf, header.after_with, indent); + fmt_exposes(buf, header.generates_with, indent); +} + pub fn fmt_app_header<'a, 'buf>(buf: &mut Buf<'buf>, header: &'a AppHeader<'a>) { let indent = INDENT; buf.indent(0);