Skip to content

dartdoc fails typedef reference tests with head analyzer as of Oct 3 #2036

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

Closed
jcollins-g opened this issue Oct 4, 2019 · 3 comments · Fixed by #2038
Closed

dartdoc fails typedef reference tests with head analyzer as of Oct 3 #2036

jcollins-g opened this issue Oct 4, 2019 · 3 comments · Fixed by #2038
Assignees
Labels
P0 A serious issue requiring immediate resolution type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)

Comments

@jcollins-g
Copy link
Contributor

jcollins-g commented Oct 4, 2019

Sometime between these two builds dartdoc has started reliably failing when run with the head version of the analyzer from the SDK repository.

https://travis-ci.org/dart-lang/dartdoc/builds/592862550
https://travis-ci.org/dart-lang/dartdoc/builds/593346670

test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +332 ~1 -1: Typedef anonymous nested functions inside typedefs are handled [E]
test-with-analyzer-sdk: dart2-model_test.dart:   Expected: a string starting with 'void Function'
test-with-analyzer-sdk: dart2-model_test.dart:     Actual: '<a href="ex/aComplexTypedef.html">aComplexTypedef</a><span class="signature">&lt;<wbr><span class="type-parameter">A1</span>, <span class="type-parameter">A2</span>, <span class="type-parameter">A3</span>&gt;</span>'
test-with-analyzer-sdk: dart2-model_test.dart:
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 153:30   fail
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 147:3    _expect
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 59:3     expect
test-with-analyzer-sdk: dart2-model_test.dart:   test/model_test.dart 3497:7                        main.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 168:27  Declarer.test.<fn>.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   ===== asynchronous gap ===========================
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1062:19                       _CustomZone.registerBinaryCallback
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async-patch/async_patch.dart 80:23            _asyncErrorWrapperHelper
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart          Invoker.waitForOutstandingCallbacks.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1124:13                       _rootRun
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1021:19                       _CustomZone.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1516:10                       _runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1463:12                       runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart 239:5    Invoker.waitForOutstandingCallbacks
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 166:33  Declarer.test.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1124:13                       _rootRun
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1021:19                       _CustomZone.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1516:10                       _runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1463:12                       runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 165:13  Declarer.test.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   ===== asynchronous gap ===========================
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1045:19                       _CustomZone.registerCallback
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 962:22                        _CustomZone.bindCallbackGuarded
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/timer.dart 52:45                        new Timer
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/timer.dart 87:9                         Timer.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/future.dart 174:11                      new Future
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart 391:21   Invoker._onRun.<fn>.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:
test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +332 ~1 -1: Typedef anonymous nested functions inside typedefs are handled correctly
test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +332 ~1 -2: Typedef anonymous nested functions inside typedefs are handled correctly [E]
test-with-analyzer-sdk: dart2-model_test.dart:   Expected: 'void Function<span class="signature">(<span class="parameter" id="param-"><span class="type-annotation">A1</span>, </span> <span class="parameter" id="param-"><span class="type-annotation">A2</span>, </span> <span class="parameter" id="param-"><span class="type-annotation">A3</span></span>)</span>'
test-with-analyzer-sdk: dart2-model_test.dart:     Actual: '<a href="ex/aComplexTypedef.html">aComplexTypedef</a><span class="signature">&lt;<wbr><span class="type-parameter">A1</span>, <span class="type-parameter">A2</span>, <span class="type-parameter">A3</span>&gt;</span>'
test-with-analyzer-sdk: dart2-model_test.dart:      Which: is different.
test-with-analyzer-sdk: dart2-model_test.dart:             Expected: void Funct ...
test-with-analyzer-sdk: dart2-model_test.dart:               Actual: <a href="e ...
test-with-analyzer-sdk: dart2-model_test.dart:                       ^
test-with-analyzer-sdk: dart2-model_test.dart:              Differ at offset 0
test-with-analyzer-sdk: dart2-model_test.dart:
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 153:30   fail
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 147:3    _expect
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 59:3     expect
test-with-analyzer-sdk: dart2-model_test.dart:   test/model_test.dart 3506:7                        main.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 168:27  Declarer.test.<fn>.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   ===== asynchronous gap ===========================
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1062:19                       _CustomZone.registerBinaryCallback
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async-patch/async_patch.dart 80:23            _asyncErrorWrapperHelper
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart          Invoker.waitForOutstandingCallbacks.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1124:13                       _rootRun
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1021:19                       _CustomZone.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1516:10                       _runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1463:12                       runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart 239:5    Invoker.waitForOutstandingCallbacks
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 166:33  Declarer.test.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1124:13                       _rootRun
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1021:19                       _CustomZone.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1516:10                       _runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1463:12                       runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 165:13  Declarer.test.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   ===== asynchronous gap ===========================
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1045:19                       _CustomZone.registerCallback
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 962:22                        _CustomZone.bindCallbackGuarded
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/timer.dart 52:45                        new Timer
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/timer.dart 87:9                         Timer.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/future.dart 174:11                      new Future
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart 391:21   Invoker._onRun.<fn>.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:
test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +332 ~1 -2: Typedef has a fully qualified name
test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +333 ~1 -2: Typedef has enclosing element
test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +334 ~1 -2: Typedef docs
test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +335 ~1 -2: Typedef linked return type
test-with-analyzer-sdk: dart2-model_test.dart: 03:59 +335 ~1 -3: Typedef linked return type [E]
test-with-analyzer-sdk: dart2-model_test.dart:   Expected: 'String'
test-with-analyzer-sdk: dart2-model_test.dart:     Actual: '<a href="ex/processMessage.html">processMessage</a><span class="signature">&lt;<wbr><span class="type-parameter">T</span>&gt;</span>'
test-with-analyzer-sdk: dart2-model_test.dart:      Which: is different.
test-with-analyzer-sdk: dart2-model_test.dart:             Expected: String
test-with-analyzer-sdk: dart2-model_test.dart:               Actual: <a href="e ...
test-with-analyzer-sdk: dart2-model_test.dart:                       ^
test-with-analyzer-sdk: dart2-model_test.dart:              Differ at offset 0
test-with-analyzer-sdk: dart2-model_test.dart:
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 153:30   fail
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 147:3    _expect
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/frontend/expect.dart 59:3     expect
test-with-analyzer-sdk: dart2-model_test.dart:   test/model_test.dart 3533:7                        main.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 168:27  Declarer.test.<fn>.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   ===== asynchronous gap ===========================
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1062:19                       _CustomZone.registerBinaryCallback
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async-patch/async_patch.dart 80:23            _asyncErrorWrapperHelper
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart          Invoker.waitForOutstandingCallbacks.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1124:13                       _rootRun
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1021:19                       _CustomZone.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1516:10                       _runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1463:12                       runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart 239:5    Invoker.waitForOutstandingCallbacks
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 166:33  Declarer.test.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1124:13                       _rootRun
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1021:19                       _CustomZone.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1516:10                       _runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1463:12                       runZoned
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/declarer.dart 165:13  Declarer.test.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:   ===== asynchronous gap ===========================
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 1045:19                       _CustomZone.registerCallback
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/zone.dart 962:22                        _CustomZone.bindCallbackGuarded
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/timer.dart 52:45                        new Timer
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/timer.dart 87:9                         Timer.run
test-with-analyzer-sdk: dart2-model_test.dart:   dart:async/future.dart 174:11                      new Future
test-with-analyzer-sdk: dart2-model_test.dart:   package:test_api/src/backend/invoker.dart 391:21   Invoker._onRun.<fn>.<fn>.<fn>
test-with-analyzer-sdk: dart2-model_test.dart:
@jcollins-g jcollins-g added type-bug Incorrect behavior (everything from a crash to more subtle misbehavior) P0 A serious issue requiring immediate resolution labels Oct 4, 2019
@jcollins-g jcollins-g self-assigned this Oct 4, 2019
@jcollins-g
Copy link
Contributor Author

jcollins-g commented Oct 4, 2019

This causes a pretty severe regression in dartdoc's typedef handling, making our display of return types incorrect.

For the aComplexTypedef typedef:

/// Someone might do this some day.
typedef aComplexTypedef<A1, A2, A3> = void Function(A1, A2, A3) Function(
    A3, String);

We get this in dartdoc before the not yet determined CL in analyzer head:

Screen Shot 2019-10-04 at 1 59 27 PM

After:

Screen Shot 2019-10-04 at 1 59 39 PM

Going to run a bisect to try to find the origination of the problem.

@jcollins-g
Copy link
Contributor Author

Bisect blames https://dart-review.googlesource.com/c/sdk/+/119823, which is reasonable since it has to do with typedefs. Drilling down further.

@jcollins-g
Copy link
Contributor Author

This looks as though the return type calculation by dartdoc is broken by the referenced change, probably because of inconsistent analyzer behavior dartdoc worked around that the referenced change corrects. It's a bit of a mess inside dartdoc where it is trying to figure out the return type, will take some time to fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
P0 A serious issue requiring immediate resolution type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant