From f00f75a078ba15131f328eff8532776fbc3a6f9a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 23 Dec 2020 13:01:27 +0300 Subject: Document `make` module design --- crates/syntax/src/ast/make.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'crates/syntax/src') diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs index ba7e5d2fb..cafa4c198 100644 --- a/crates/syntax/src/ast/make.rs +++ b/crates/syntax/src/ast/make.rs @@ -4,6 +4,11 @@ //! Note that all functions here intended to be stupid constructors, which just //! assemble a finish node from immediate children. If you want to do something //! smarter than that, it probably doesn't belong in this module. +//! +//! Keep in mind that `from_text` functions should be kept private. The public +//! API should require to assemble every node piecewise. The trick of +//! `parse(format!())` we use internally is an implementation detail -- long +//! term, it will be replaced with direct tree manipulation. use itertools::Itertools; use stdx::format_to; @@ -16,7 +21,8 @@ pub fn name(text: &str) -> ast::Name { pub fn name_ref(text: &str) -> ast::NameRef { ast_from_text(&format!("fn f() {{ {}; }}", text)) } - +// FIXME: replace stringly-typed constructor with a family of typed ctors, a-la +// `expr_xxx`. pub fn ty(text: &str) -> ast::Type { ast_from_text(&format!("impl {} for D {{}};", text)) } -- cgit v1.2.3