Skip to content
New issue

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

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

Already on GitHub? Sign in 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in 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