scan method
Implementation
@override
Safety<bool> scan(SyntaxScanner scanner) {
final log = Log(classLocation: runtimeType, functionLocation: 'scan');
// indent となる場合
// 1. 直前が存在しない(file の開始)
// 2. 直前が改行
final lookIndex = scanner.lookIndex;
switch (lookIndex) {
// 1
case 0:
// 直前が存在しない
break;
case _:
// 1 より必ず return.
final justBefore = scanner.source.elementAt(lookIndex - 1);
// 直前が改行
if (justBefore is NewLine) break;
return Safety(false, log);
}
final firstResult = scanner.look();
log.add(firstResult);
final first = firstResult.wrapped;
if (first is! SpaceCollection) {
scanner.reset();
return Safety(false, log);
}
final result = Indent(first);
scanner.scan(result);
return Safety(true, log);
}