Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Parser error recovery discards too much in PNGS.sort((String a, Str1)); #884

Closed
stevemessick opened this issue Dec 15, 2011 · 8 comments
Closed
Labels
area-analyzer Use area-analyzer for Dart analyzer issues, including the analysis server and code completion.
Milestone

Comments

@stevemessick
Copy link
Contributor

Full source:

class Foo { int boo = 7; mth() { PNGS.sort((String a, Str1)); }}

This is from a code completion test. The completion point is just before the 1 in Str1. The parser produces an AST for the body of mth() that is equivalent to:

{
  PNGS.sort((String));
}

There's no info about the identifier to be completed, so code completion cannot do anything. Note that two identifiers are lost: a, and Str1.

@jtmcdole
Copy link
Contributor

Verified with --dump_ast_format console. This might be a simple case, so I'll take a quick look.

parserChew.dart:1: Unexpected token 'IDENTIFIER' (note: error marker on a)
     1: class Foo { int boo = 7; mth() { PNGS.sort((String a, Str1)); }}
   DartClass (class Foo)
      DartFieldDefinition
         DartTypeNode
            DartIdentifier (int)
         DartField (boo)
            DartIntegerLiteral (7)
      DartMethodDefinition (mth)
         DartFunction
            DartBlock
               DartExprStmt
                  DartMethodInvocation
                     DartIdentifier (PNGS)
                     DartIdentifier (sort)
                     DartParenthesizedExpression
                        DartIdentifier (String)


Set owner to @jtmcdole.
Added Accepted label.

@jtmcdole
Copy link
Contributor

So as I suspected, the parser expects a ')' after String, and eats tokens till it finds it. I'm curious to know what you think the AST should look like in this case? DartNode doesn't have an List<DartNode> errors attached to it, so 'IDENTIFIER a, IDENTIFIER Str1' can't get stuffed on DartParenthesizedExpression.

I assume PNGS is a list and you're calling sort() with the compare closure, in which case this should look more like a function with a missing => or {}.

@stevemessick
Copy link
Contributor Author

Your assumption is correct. The user (i.e. me) was typing a compare function and tried to complete "Str" expecting "String" to appear in the list. The => would be typed shortly thereafter. I don't care what the AST looks like as long as it has enough information that I can produce a completion list for "Str". Some sort of synthetic error node would be fine -- the completion engine is just a huge set of heuristics, and adding one more won't hurt anything.

@DartBot
Copy link

DartBot commented Apr 2, 2012

This comment was originally written by zundel@google.com


Removed the owner.

@kasperl
Copy link

kasperl commented Apr 17, 2012

Removed Area-Compiler label.
Added Area-Analyzer label.

@bwilkerson
Copy link
Member

Added this to the Later milestone.

@bwilkerson
Copy link
Member

Removed this from the Later milestone.
Added this to the M3 milestone.

@stevemessick
Copy link
Contributor Author

Removed this from the M3 milestone.
Added this to the M1 milestone.
Added Fixed label.

@stevemessick stevemessick added Type-Defect area-analyzer Use area-analyzer for Dart analyzer issues, including the analysis server and code completion. labels Oct 5, 2012
@stevemessick stevemessick added this to the M1 milestone Oct 5, 2012
copybara-service bot pushed a commit that referenced this issue Mar 7, 2023
…stack_trace, stream_channel, test, tools, watcher, webdev, yaml, yaml_edit

Revisions updated by `dart tools/rev_sdk_deps.dart`.

async (https://github.com/dart-lang/async/compare/8deaa40..f454380):
  f454380  2023-03-02  Natalie Weizenbaum  Add `StreamExtensions.listenAndBuffer()` (#235)

dartdoc (https://github.com/dart-lang/dartdoc/compare/77d5994..98fa859):
  98fa859c  2023-03-05  dependabot[bot]  Bump cli_util from 0.3.5 to 0.4.0 (#3360)

html (https://github.com/dart-lang/html/compare/0b8025c..08643e9):
  08643e9  2023-03-02  Devon Carew  prep for publishing 0.15.2 (#205)

http (https://github.com/dart-lang/http/compare/1500a71..805a147):
  805a147  2023-03-02  Kevin Moore  Fix some spelling (#884)
  5a2f036  2023-03-02  Kevin Moore  Move to pkg:dart_flutter_team_lints, require Dart 2.19 (#883)
  35b2cef  2023-03-02  Bahaa Fathi Yousef  Corrected the spelling of "Implements" in "/http/lib/src/io_client.dart" (#871)
  bb86cf3  2023-02-27  Brian Quinlan  Provide access to NSURLSession.sessionDescription (#881)

http_multi_server (https://github.com/dart-lang/http_multi_server/compare/2cd5355..7bd190c):
  7bd190c  2023-03-06  Kevin Moore  Require Dart 2.19, enable and fix new team lints (#51)

source_map_stack_trace (https://github.com/dart-lang/source_map_stack_trace/compare/a60ef54..45ea368):
  45ea368  2023-03-07  Kevin Moore  Require Dart 2.19, use pkg:dart_flutter_team_lints (#35)

stream_channel (https://github.com/dart-lang/stream_channel/compare/0850515..a20ccd4):
  a20ccd4  2023-02-28  Kevin Moore  move to pkg:dart_flutter_team_lints lints, fix code, bump min SDK (#87)

test (https://github.com/dart-lang/test/compare/1307cc5..92da93a):
  92da93a8  2023-03-06  Devon Carew  dogfood the new setup-dart action (#1964)
  e49818ec  2023-03-01  dependabot[bot]  Bump github/codeql-action from 2.2.1 to 2.2.5 (#1963)

tools (https://github.com/dart-lang/tools/compare/28b7be8..a1c3506):
  a1c3506  2023-03-07  Devon Carew  dogfood the new setup-dart action (#25)
  fb46723  2023-03-07  Elias Yishak  Update pubspec.yaml (#24)
  5a72344  2023-03-06  Elias Yishak  Add `DashEvent` for toggling telemetry collection + send event whenever toggled (#23)

watcher (https://github.com/dart-lang/watcher/compare/0ca6638..5968409):
  5968409  2023-03-07  Kevin Moore  blast_repo fixes (#139)
  e8f771a  2023-03-07  Kevin Moore  Require Dart 2.19, use new team lints (#138)

webdev (https://github.com/dart-lang/webdev/compare/deb801b..c007560):
  c007560  2023-03-06  Elliott Brooks (she/her)  [MV3 Debug Extension] Show warning when clicking on debug extension for non Dart app (#2015)
  1a010dc  2023-03-06  Devon Carew  dogfood the new setup-dart action (#2017)
  07743a3  2023-03-06  Anna Gringauze  Fix exception mapping from JS to dart (#2004)
  eb63b31  2023-03-03  Elliott Brooks (she/her)  Create a Dart Debug Extension issue template (#2014)
  85f35d4  2023-03-01  Devon Carew  update publishing automation integration (#2002)
  e748045  2023-02-28  Anna Gringauze  Prepare to release webdev 3.0.1 (#2000)
  5355050  2023-02-27  Elliott Brooks (she/her)  [MV3 Debug Extension] Ignore page reloads for detecting navigation away from app (#1994)
  4e08276  2023-02-27  Anna Gringauze  Prepare to release dwds 18.0.0 (#1993)
  fc54d68  2023-02-27  Anna Gringauze  Fix expression evaluation failures on empty scopes (#1998)
  496a2b4  2023-02-27  Anna Gringauze  Temporarily disable publish verification (#1996)

yaml (https://github.com/dart-lang/yaml/compare/a6d8781..1ad2f49):
  1ad2f49  2023-03-01  Kevin Moore  Require Dart 2.19, migrate to dart_flutter_team_lints, make associated fixes (#138)
  4d369fd  2023-03-01  Kevin Moore  benchmark: fix output.json (#137)

yaml_edit (https://github.com/dart-lang/yaml_edit/compare/998eea2..0668eb5):
  0668eb5  2023-03-02  Jonas Finnemann Jensen  Wrap recursively, prepare release (#28)
  a4ff857  2023-03-01  Mohamed Ishad  Update CHANGELOG.md (#37)
  2fdfbdb  2023-02-28  Mohamed Ishad  Fix for issue #23 (#34)
  494ad7c  2023-02-25  MikiPaul  fixed typo (#36)

Change-Id: I101c94575c20fca55c7440e84668413207073a32
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/287162
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
This issue was closed.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
area-analyzer Use area-analyzer for Dart analyzer issues, including the analysis server and code completion.
Projects
None yet
Development

No branches or pull requests

5 participants