Dartdoc: 2 поздних поля одного и того же типа приводят к ошибке

Созданный на 24 июл. 2020  ·  17Комментарии  ·  Источник: dart-lang/dartdoc

С двумя поздними полями одного типа, как в следующем коде:

class A {
  late double a;
  late double b;
}

dartdoc --enable-experiment=non-nullable выводит ошибку:

Generating docs for library a from package:hello_world/a.dart...
  error: failed to write file at: a/A/double.html, for symbol a.A.double: (file:///home/a14n/hello_world/lib/a.dart:2:8)
            Dartdoc generates a path and filename to write to for each symbol.
            a.A.double conflicts with another symbol in the generated path, and
            therefore can not be written out.  Changing the name, library name, or
            class name (if appropriate) of one of the conflicting items can resolve
            the conflict.   Alternatively, use the <strong i="10">@nodoc</strong> tag in one symbol's
            documentation comments to hide it.

Только с одним поздним полем проблем не возникает.

Все 17 Комментарий

FWIW эта проблема блокирует миграцию флаттера на нулевую безопасность.

Где смайлик с кричащим лицом ... Какая странная ошибка. Я посмотрю на это сегодня.

dartdoc не видит, что ваш источник использует функцию нулевой безопасности. Есть 17 причин, по которым это может быть, ха-ха. Можете ли вы проверить следующее:

  1. Включен ли пакет в нулевую безопасность с помощью ограничений SDK? Я думаю, это может включать 2.9 _или_ 2.10 в зависимости от версии Dart, которую вы используете.
  2. Включен ли пакет в нулевую безопасность через analysis_options?
analyzer:
  enable-experiment:
    - non-nullable
  1. Вы запускаете dartdoc с экспериментом null-safety ? Если вы вызываете его через pub, вероятно, это что-то вроде pub global run dartdoc --enable-experiment=null-safety .

да у меня есть простой пакет с

//------ analysis_options.yaml
analyzer:
  enable-experiment:
  - non-nullable
//------ pubspec.yaml
name: hello_world
environment:
  sdk: ">=2.9.0-14.0.dev <3.0.0"
//------ lib/a.dart
class A {
  late double a;
  late double b;
}

И я запускаю dartdoc --enable-experiment=non-nullable (та же ошибка с dartdoc --enable-experiment=null-safety ).

Вы можете увидеть сбой в моем PR https://cirrus-ci.com/task/4975447580606464?command=main#L137

@srawlins удалось ли вам воспроизвести проблему?

FWIW эта проблема блокирует миграцию флаттера на нулевую безопасность

Это блокирует миграцию? Блокировать какой-то аспект? Есть ли у вас временное решение?

Я не смог воспроизвести это при выборе нулевой безопасности через pubspec:

environment:
  sdk: '>=2.9.0-18.0 <2.9.0'

и analysis_options:

analyzer:
  enable-experiment:
    - non-nullable

и используя dartdoc в голове, запустив dart в голове:

~/code/dart-sdk/sdk/xcodebuild/ReleaseX64/dart-sdk/bin/dart
    --enable-experiment=non-nullable
    ../dart-dartdoc/bin/dartdoc.dart
    --enable-experiment=non-nullable

Я нахожусь в процессе выпуска dartdoc, так как это было давно. Я также проверю последнюю версию.

Это блокирует миграцию? Блокировать какой-то аспект?

Да, потому что docs-linux работа всегда терпит неудачу. (См. Флаттер / флаттер # 62157)

Есть ли у вас временное решение?

Удалить все late самом деле не является обходным решением, потому что нужно будет везде добавить ! и ? :-(

Упоминание о невыполненной работе dartdoc version: 0.32.1 . Не могли бы вы убедиться, что эта версия вызывает проблему на вашей стороне? Если вы видите проблему, это может означать, что она была исправлена ​​в какой-то момент, и следующий выпуск решит проблему.

Попался; Я надеялся на некоторые флаги, которые мы могли бы передать в dartdoc (или флаги, которые мы могли бы опустить), которые позволили бы нам продолжить работу.

@srawlins - Я думаю, что исправление здесь будет важным, чтобы обеспечить прогресс миграции nnbd в целом.

Да, похоже, я могу воспроизвести это на 0.32.1, используя Dart 2.10.0-dev.something. Есть невыпущенная версия 0.32.2, которая может работать. Я тоже попробую.

Я могу воспроизвести, используя pub global run в теге git v0.32.2 и на мастере. Я работаю над тем, чтобы понять, почему pub является виновником.

Сотрите это. У меня был случайный // @dart=2.9 в моем тестовом файле (который теперь _ слишком низкий_, чтобы указать на нулевую безопасность).

Я не могу воспроизвести ошибку с помощью pub run dartdoc в dartdoc 0.32.1, ни в git branch v0.32.2, ни в head.

FWIW, я не вижу --enable-experiment=non-nullable в вызове dartdoc на связанном боте Linux.

Я не вижу --enable-experiment=non-nullable в вашей ссылке на перистые облака, ни в последней ссылке на циррусы в вашем PR.

Хороший улов! Это должно решить проблему.

(Но локально я действительно не знаю, что я сделал, чтобы увидеть эту проблему)

Сообщите нам, если это сработает. Я планирую опубликовать дартдок завтра утром, после того, как он будет проверен внутри компании.

Добавление --enable-experiment=non-nullable устранило проблему. Спасибо за вашу помощь.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги