@@ -6,6 +6,7 @@ import 'package:charcode/charcode.dart';
66import 'package:string_scanner/string_scanner.dart' ;
77
88import '../ast/sass.dart' ;
9+ import '../exception.dart' ;
910import '../interpolation_buffer.dart' ;
1011import '../util/character.dart' ;
1112import '../value.dart' ;
@@ -253,6 +254,41 @@ class SassParser extends StylesheetParser {
253254 buffer.writeCharCode (scanner.readChar ());
254255 }
255256
257+ case $asterisk:
258+ if (scanner.peekChar (1 ) == $slash) {
259+ buffer.writeCharCode (scanner.readChar ());
260+ buffer.writeCharCode (scanner.readChar ());
261+ var span = scanner.spanFrom (start);
262+ whitespace ();
263+
264+ // For backwards compatibility, allow additional comments after
265+ // the initial comment is closed.
266+ while (scanner.peekChar ().isNewline &&
267+ _peekIndentation () > parentIndentation) {
268+ while (_lookingAtDoubleNewline ()) {
269+ _expectNewline ();
270+ }
271+ _readIndentation ();
272+ whitespace ();
273+ }
274+
275+ if (! scanner.isDone && ! scanner.peekChar ().isNewline) {
276+ var errorStart = scanner.state;
277+ while (! scanner.isDone && ! scanner.peekChar ().isNewline) {
278+ scanner.readChar ();
279+ }
280+ throw MultiSpanSassFormatException (
281+ "Unexpected text after end of comment" ,
282+ scanner.spanFrom (errorStart),
283+ "extra text" ,
284+ {span: "comment" });
285+ } else {
286+ return LoudComment (buffer.interpolation (span));
287+ }
288+ } else {
289+ buffer.writeCharCode (scanner.readChar ());
290+ }
291+
256292 case _:
257293 buffer.writeCharCode (scanner.readChar ());
258294 }
0 commit comments