Skip to content

Commit e36ea26

Browse files
zrr1999Copilot
andcommitted
🔧 fix: resolve CI failures (fmt, trailing whitespace, typos)
- cargo fmt: reformat parser.rs, lexer_tests.rs, parser_tests.rs, check.rs, typeck_tests.rs - trailing whitespace: strip from intent-first-signature-proposal.md - typos: add THIR (Rust compiler term) to _typos.toml ignore list Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 737a73b commit e36ea26

7 files changed

Lines changed: 79 additions & 54 deletions

File tree

_typos.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ spore = "spore"
1111
sporec = "sporec"
1212
typeck = "typeck"
1313
codegen = "codegen"
14+
# Rust compiler term: Typed High-level IR
15+
THIR = "THIR"
1416

1517
[files]
1618
extend-exclude = ["docs/research/"]

crates/spore-parser/src/parser.rs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,7 @@ impl Parser {
358358
self.expect(&Token::RParen)?;
359359
Ok(inner)
360360
}
361-
_ => Err(self.error(format!(
362-
"expected cost expression, found {:?}",
363-
self.peek()
364-
))),
361+
_ => Err(self.error(format!("expected cost expression, found {:?}", self.peek()))),
365362
}
366363
}
367364

@@ -382,8 +379,7 @@ impl Parser {
382379
// Check for generic params: `List[Int]`
383380
if self.at(&Token::LBracket) {
384381
self.advance();
385-
let args =
386-
self.parse_comma_sep(|p| p.parse_type_expr(), &Token::RBracket)?;
382+
let args = self.parse_comma_sep(|p| p.parse_type_expr(), &Token::RBracket)?;
387383
self.expect(&Token::RBracket)?;
388384
Ok(TypeExpr::Generic(name, args))
389385
} else {
@@ -393,8 +389,7 @@ impl Parser {
393389
Token::LParen => {
394390
self.advance();
395391
// Tuple or function type
396-
let types =
397-
self.parse_comma_sep(|p| p.parse_type_expr(), &Token::RParen)?;
392+
let types = self.parse_comma_sep(|p| p.parse_type_expr(), &Token::RParen)?;
398393
self.expect(&Token::RParen)?;
399394
if self.at(&Token::Arrow) {
400395
self.advance();
@@ -842,11 +837,7 @@ impl Parser {
842837
} else {
843838
None
844839
};
845-
Ok(Expr::If(
846-
Box::new(cond),
847-
Box::new(then_branch),
848-
else_branch,
849-
))
840+
Ok(Expr::If(Box::new(cond), Box::new(then_branch), else_branch))
850841
}
851842

852843
// ── Match expression ────────────────────────────────────────────
@@ -907,8 +898,7 @@ impl Parser {
907898
// Constructor: `Some(x)` or struct: `Point { x, y }`
908899
if self.at(&Token::LParen) {
909900
self.advance();
910-
let fields =
911-
self.parse_comma_sep(|p| p.parse_pattern(), &Token::RParen)?;
901+
let fields = self.parse_comma_sep(|p| p.parse_pattern(), &Token::RParen)?;
912902
self.expect(&Token::RParen)?;
913903
Ok(Pattern::Constructor(name, fields))
914904
} else if self.at(&Token::LBrace) {

crates/spore-parser/tests/lexer_tests.rs

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,7 @@ fn test_float_literal() {
5555

5656
#[test]
5757
fn test_string_literal() {
58-
assert_eq!(
59-
toks_no_eof(r#""hello""#),
60-
vec![Token::Str("hello".into())]
61-
);
58+
assert_eq!(toks_no_eof(r#""hello""#), vec![Token::Str("hello".into())]);
6259
}
6360

6461
#[test]
@@ -98,7 +95,14 @@ fn test_identifiers() {
9895
fn test_keywords() {
9996
assert_eq!(
10097
toks_no_eof("fn let if else match return"),
101-
vec![Token::Fn, Token::Let, Token::If, Token::Else, Token::Match, Token::Return]
98+
vec![
99+
Token::Fn,
100+
Token::Let,
101+
Token::If,
102+
Token::Else,
103+
Token::Match,
104+
Token::Return
105+
]
102106
);
103107
}
104108

@@ -154,7 +158,13 @@ fn test_module_keywords() {
154158
fn test_arithmetic_operators() {
155159
assert_eq!(
156160
toks_no_eof("+ - * / %"),
157-
vec![Token::Plus, Token::Minus, Token::Star, Token::Slash, Token::Percent]
161+
vec![
162+
Token::Plus,
163+
Token::Minus,
164+
Token::Star,
165+
Token::Slash,
166+
Token::Percent
167+
]
158168
);
159169
}
160170

@@ -185,7 +195,14 @@ fn test_logical_operators() {
185195
fn test_bitwise_operators() {
186196
assert_eq!(
187197
toks_no_eof("& | ^ ~ << >>"),
188-
vec![Token::Amp, Token::Pipe, Token::Caret, Token::Tilde, Token::Shl, Token::Shr]
198+
vec![
199+
Token::Amp,
200+
Token::Pipe,
201+
Token::Caret,
202+
Token::Tilde,
203+
Token::Shl,
204+
Token::Shr
205+
]
189206
);
190207
}
191208

@@ -207,7 +224,11 @@ fn test_two_char_operators() {
207224
fn test_pipe_arrow() {
208225
assert_eq!(
209226
toks_no_eof("x |> f"),
210-
vec![Token::Ident("x".into()), Token::PipeArrow, Token::Ident("f".into())]
227+
vec![
228+
Token::Ident("x".into()),
229+
Token::PipeArrow,
230+
Token::Ident("f".into())
231+
]
211232
);
212233
}
213234

@@ -226,9 +247,12 @@ fn test_delimiters() {
226247
assert_eq!(
227248
toks_no_eof("( ) { } [ ]"),
228249
vec![
229-
Token::LParen, Token::RParen,
230-
Token::LBrace, Token::RBrace,
231-
Token::LBracket, Token::RBracket,
250+
Token::LParen,
251+
Token::RParen,
252+
Token::LBrace,
253+
Token::RBrace,
254+
Token::LBracket,
255+
Token::RBracket,
232256
]
233257
);
234258
}
@@ -240,8 +264,12 @@ fn test_punctuation() {
240264
assert_eq!(
241265
toks_no_eof(", : ; . @ #"),
242266
vec![
243-
Token::Comma, Token::Colon, Token::Semicolon,
244-
Token::Dot, Token::At, Token::Hash,
267+
Token::Comma,
268+
Token::Colon,
269+
Token::Semicolon,
270+
Token::Dot,
271+
Token::At,
272+
Token::Hash,
245273
]
246274
);
247275
}
@@ -302,9 +330,7 @@ fn test_eq_assign() {
302330

303331
#[test]
304332
fn test_spans() {
305-
let tokens = Lexer::new("fn add")
306-
.tokenize()
307-
.unwrap();
333+
let tokens = Lexer::new("fn add").tokenize().unwrap();
308334
assert_eq!(tokens[0].span, Span::new(0, 2));
309335
assert_eq!(tokens[0].node, Token::Fn);
310336
assert_eq!(tokens[1].span, Span::new(3, 6));

crates/spore-parser/tests/parser_tests.rs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ fn parse_ok(src: &str) -> spore_parser::ast::Module {
44
parse(src).unwrap_or_else(|errs| {
55
panic!(
66
"parse failed:\n{}",
7-
errs.iter().map(|e| e.to_string()).collect::<Vec<_>>().join("\n")
7+
errs.iter()
8+
.map(|e| e.to_string())
9+
.collect::<Vec<_>>()
10+
.join("\n")
811
)
912
})
1013
}
@@ -118,11 +121,7 @@ fn test_arithmetic_precedence() {
118121
spore_parser::ast::Expr::BinOp(_, spore_parser::ast::BinOp::Add, rhs) => {
119122
assert!(matches!(
120123
rhs.as_ref(),
121-
spore_parser::ast::Expr::BinOp(
122-
_,
123-
spore_parser::ast::BinOp::Mul,
124-
_
125-
)
124+
spore_parser::ast::Expr::BinOp(_, spore_parser::ast::BinOp::Mul, _)
126125
));
127126
}
128127
_ => panic!("expected Add at top"),
@@ -143,7 +142,10 @@ fn test_if_expr() {
143142
let body = f.body.as_ref().unwrap();
144143
match body {
145144
spore_parser::ast::Expr::Block(_, Some(tail)) => {
146-
assert!(matches!(tail.as_ref(), spore_parser::ast::Expr::If(_, _, Some(_))));
145+
assert!(matches!(
146+
tail.as_ref(),
147+
spore_parser::ast::Expr::If(_, _, Some(_))
148+
));
147149
}
148150
_ => panic!("expected block with if tail"),
149151
}
@@ -225,7 +227,10 @@ fn test_lambda() {
225227
let body = f.body.as_ref().unwrap();
226228
match body {
227229
spore_parser::ast::Expr::Block(_, Some(tail)) => {
228-
assert!(matches!(tail.as_ref(), spore_parser::ast::Expr::Lambda(_, _)));
230+
assert!(matches!(
231+
tail.as_ref(),
232+
spore_parser::ast::Expr::Lambda(_, _)
233+
));
229234
}
230235
_ => panic!("expected block"),
231236
}
@@ -342,15 +347,13 @@ fn test_capability_def() {
342347
fn test_generic_type() {
343348
let m = parse_ok("fn f(xs: List[Int]) -> List[String] { xs }");
344349
match &m.items[0] {
345-
spore_parser::ast::Item::Function(f) => {
346-
match &f.params[0].ty {
347-
spore_parser::ast::TypeExpr::Generic(name, args) => {
348-
assert_eq!(name, "List");
349-
assert_eq!(args.len(), 1);
350-
}
351-
_ => panic!("expected generic type"),
350+
spore_parser::ast::Item::Function(f) => match &f.params[0].ty {
351+
spore_parser::ast::TypeExpr::Generic(name, args) => {
352+
assert_eq!(name, "List");
353+
assert_eq!(args.len(), 1);
352354
}
353-
}
355+
_ => panic!("expected generic type"),
356+
},
354357
_ => panic!("expected function"),
355358
}
356359
}

crates/spore-typeck/src/check.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ impl Checker {
4141
fn register_item(&mut self, item: &Item) {
4242
match item {
4343
Item::Function(f) => {
44-
let param_tys: Vec<Ty> = f.params.iter().map(|p| self.resolve_type(&p.ty)).collect();
44+
let param_tys: Vec<Ty> =
45+
f.params.iter().map(|p| self.resolve_type(&p.ty)).collect();
4546
let ret_ty = f
4647
.return_type
4748
.as_ref()

crates/spore-typeck/tests/typeck_tests.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ fn check_ok(src: &str) {
66
type_check(&module).unwrap_or_else(|errs| {
77
panic!(
88
"type errors:\n{}",
9-
errs.iter().map(|e| e.to_string()).collect::<Vec<_>>().join("\n")
9+
errs.iter()
10+
.map(|e| e.to_string())
11+
.collect::<Vec<_>>()
12+
.join("\n")
1013
)
1114
});
1215
}

docs/research/intent-first-signature-proposal.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,19 +310,19 @@ contract {
310310

311311
### 改动摘要
312312

313-
1. **平铺签名改为分层签名**
313+
1. **平铺签名改为分层签名**
314314
`uses` / `cost` 等约束信息不再与主签名并列堆叠,而进入 `contract`
315315

316-
2. **新增 `intent`**
316+
2. **新增 `intent`**
317317
让“函数想完成什么”成为显式结构,而不是依赖注释和命名推断。
318318

319-
3. **新增 `requires` / `ensures`**
319+
3. **新增 `requires` / `ensures`**
320320
让行为层约束语言内建,便于诊断、测试和 Agent 约束提取。
321321

322-
4. **新增 hole 契约声明**
322+
4. **新增 hole 契约声明**
323323
保留 `?name` 的简洁使用方式,同时让 hole 的可用策略和验收条件一等化。
324324

325-
5. **建议采用显式 `impl`**
325+
5. **建议采用显式 `impl`**
326326
使“谁为谁实现 capability”对人类与工具都更清晰。
327327

328328
## 设计收益

0 commit comments

Comments
 (0)