1mod attribute;
2mod brackets;
3mod expr;
4mod generics;
5mod item;
6mod keywords;
7mod literal;
8mod module;
9mod parse;
10mod parser;
11mod path;
12mod pattern;
13mod priv_prelude;
14mod punctuated;
15mod submodule;
16#[cfg(test)]
17mod test_utils;
18mod token;
19mod ty;
20mod where_clause;
21
22use crate::priv_prelude::*;
23pub use crate::{
24 keywords::RESERVED_KEYWORDS,
25 parse::Parse,
26 parser::Parser,
27 token::{lex, lex_commented, parse_int_suffix},
28};
29
30use sway_ast::{
31 attribute::Annotated,
32 token::{DocComment, DocStyle},
33 Module, ModuleKind,
34};
35use sway_error::handler::{ErrorEmitted, Handler};
36use sway_types::SourceId;
37
38use std::sync::Arc;
39
40pub fn parse_file(
41 handler: &Handler,
42 src: Arc<str>,
43 source_id: Option<SourceId>,
44) -> Result<Annotated<Module>, ErrorEmitted> {
45 let ts = lex(handler, &src, 0, src.len(), source_id)?;
46 let (m, _) = Parser::new(handler, &ts).parse_to_end()?;
47 Ok(m)
48}
49
50pub fn parse_module_kind(
51 handler: &Handler,
52 src: Arc<str>,
53 source_id: Option<SourceId>,
54) -> Result<ModuleKind, ErrorEmitted> {
55 let ts = lex(handler, &src, 0, src.len(), source_id)?;
56 let mut parser = Parser::new(handler, &ts);
57 while let Some(DocComment {
58 doc_style: DocStyle::Inner,
59 ..
60 }) = parser.peek()
61 {
62 parser.parse::<DocComment>()?;
63 }
64 parser.parse()
65}
66
67#[cfg(test)]
68mod tests {
69 use crate::*;
70
71 #[test]
72 fn parse_invalid() {
73 let _res = parse_file(&Handler::default(), Arc::from("script; fn main(256߄"), None);
75 let _res = parse_file(
76 &Handler::default(),
77 Arc::from(
78 "script;
79 fn karr() {
80 let c: f828 = 0x00000000000000000000000vncifxp;
81 abi Zezybt {
82 #[mfzbezc, storage(r#
83 true }
84 }
85 cug",
86 ),
87 None,
88 );
89 let _res = parse_file(
90 &Handler::default(),
91 Arc::from(
92 "script;
93
94 stdfn main() {
95 let a: b256 = 0x000>0000000scri s = \"flibrary I24;
96
97 use std::primitives::*;
98 use std::assert::assert;
99
100 ///\u{7eb}",
101 ),
102 None,
103 );
104 let _res = parse_file(
105 &Handler::default(),
106 Arc::from("script; \"\u{7eb}\u{7eb}"),
107 None,
108 );
109 }
110}