@@ -435,6 +435,103 @@ var a = new A // comment
435435 ] ) ;
436436 } ) ;
437437
438+ it ( "lambda with attributes (issue #303)" , async ( ) => {
439+ const input = Input . InMethod ( `
440+ var concat = ([DisallowNull] string a, [DisallowNull] string b) => a + b;
441+ var inc = [return: NotNullIfNotNull(nameof(s))] (int? s) => s.HasValue ? s++ : null;
442+ Func<string?, int?> parse = [ProvidesNullCheck] (s) => (s is not null) ? int.Parse(s) : null;
443+ ` ) ;
444+ const tokens = await tokenize ( input ) ;
445+
446+ tokens . should . deep . equal ( [
447+ Token . Keyword . Definition . Var ,
448+ Token . Identifier . LocalName ( "concat" ) ,
449+ Token . Operator . Assignment ,
450+ Token . Punctuation . OpenParen ,
451+ Token . Punctuation . OpenBracket ,
452+ Token . Type ( "DisallowNull" ) ,
453+ Token . Punctuation . CloseBracket ,
454+ Token . PrimitiveType . String ,
455+ Token . Identifier . ParameterName ( "a" ) ,
456+ Token . Punctuation . Comma ,
457+ Token . Punctuation . OpenBracket ,
458+ Token . Type ( "DisallowNull" ) ,
459+ Token . Punctuation . CloseBracket ,
460+ Token . PrimitiveType . String ,
461+ Token . Identifier . ParameterName ( "b" ) ,
462+ Token . Punctuation . CloseParen ,
463+ Token . Operator . Arrow ,
464+ Token . Variable . ReadWrite ( "a" ) ,
465+ Token . Operator . Arithmetic . Addition ,
466+ Token . Variable . ReadWrite ( "b" ) ,
467+ Token . Punctuation . Semicolon ,
468+
469+ Token . Keyword . Definition . Var ,
470+ Token . Identifier . LocalName ( "inc" ) ,
471+ Token . Operator . Assignment ,
472+ Token . Punctuation . OpenBracket ,
473+ Token . Keyword . AttributeSpecifier ( "return" ) ,
474+ Token . Punctuation . Colon ,
475+ Token . Type ( "NotNullIfNotNull" ) ,
476+ Token . Punctuation . OpenParen ,
477+ Token . Operator . Expression . NameOf ,
478+ Token . Punctuation . OpenParen ,
479+ Token . Variable . ReadWrite ( "s" ) ,
480+ Token . Punctuation . CloseParen ,
481+ Token . Punctuation . CloseParen ,
482+ Token . Punctuation . CloseBracket ,
483+ Token . Punctuation . OpenParen ,
484+ Token . PrimitiveType . Int ,
485+ Token . Punctuation . QuestionMark ,
486+ Token . Identifier . ParameterName ( "s" ) ,
487+ Token . Punctuation . CloseParen ,
488+ Token . Operator . Arrow ,
489+ Token . Variable . Object ( "s" ) ,
490+ Token . Punctuation . Accessor ,
491+ Token . Variable . Property ( "HasValue" ) ,
492+ Token . Operator . Conditional . QuestionMark ,
493+ Token . Variable . ReadWrite ( "s" ) ,
494+ Token . Operator . Increment ,
495+ Token . Operator . Conditional . Colon ,
496+ Token . Literal . Null ,
497+ Token . Punctuation . Semicolon ,
498+
499+ Token . Type ( "Func" ) ,
500+ Token . Punctuation . TypeParameter . Begin ,
501+ Token . PrimitiveType . String ,
502+ Token . Punctuation . QuestionMark ,
503+ Token . Punctuation . Comma ,
504+ Token . PrimitiveType . Int ,
505+ Token . Punctuation . QuestionMark ,
506+ Token . Punctuation . TypeParameter . End ,
507+ Token . Identifier . LocalName ( "parse" ) ,
508+ Token . Operator . Assignment ,
509+ Token . Punctuation . OpenBracket ,
510+ Token . Type ( "ProvidesNullCheck" ) ,
511+ Token . Punctuation . CloseBracket ,
512+ Token . Punctuation . OpenParen ,
513+ Token . Identifier . ParameterName ( "s" ) ,
514+ Token . Punctuation . CloseParen ,
515+ Token . Operator . Arrow ,
516+ Token . Punctuation . OpenParen ,
517+ Token . Variable . ReadWrite ( "s" ) ,
518+ Token . Operator . Pattern . Is ,
519+ Token . Operator . Pattern . Not ,
520+ Token . Literal . Null ,
521+ Token . Punctuation . CloseParen ,
522+ Token . Operator . Conditional . QuestionMark ,
523+ Token . PrimitiveType . Int ,
524+ Token . Punctuation . Accessor ,
525+ Token . Identifier . MethodName ( "Parse" ) ,
526+ Token . Punctuation . OpenParen ,
527+ Token . Variable . ReadWrite ( "s" ) ,
528+ Token . Punctuation . CloseParen ,
529+ Token . Operator . Conditional . Colon ,
530+ Token . Literal . Null ,
531+ Token . Punctuation . Semicolon
532+ ] ) ;
533+ } ) ;
534+
438535 it ( "async lambda assigned to dotted name (issue #142)" , async ( ) => {
439536 const input = Input . InMethod (
440537 `Something.listener = async args => { return true; };`
0 commit comments