- Fix the version number of pana
- Allow import of platform:flutter on platform web when calculating tags.
- Fix the finding of primary library.
- More handling of degenerate cases when computing sdk, platform and runtime tags.
- Handle degenerate cases when computing sdk, platform and runtime tags.
- Compute sdk, platform and runtime tags.
-
UrlChecker
follows redirects (max. 10 redirects). -
Fix: pre-release versions are not considered when detecting outdated dependencies.
-
Detect and report sdk tags ('sdk:flutter', 'sdk:dart').
- Upgraded dependencies:
analyzer
0.38.2
.
-
Updated suggestion for not supporting future stable SDKs.
-
Upgrade dependencies:
analyzer
to0.37
-
Support the latest
json_annotation
. -
Don't penalize outdated dependency when the package's constraint allows it, but a dependent package or SDK restricts it.
- Fix: penalize outdated package constraints only for direct dependencies.
- Penalize package constraints that does not support the latest published versions of their dependencies.
- Recognize
.markdown
and.mdown
files. - Recognize
COPYING
andUNLICENSE
as license file names (or prefix). - Accept any extension for license files.
- Fixed the use of
pedantic
rules following the new versioned pattern.
-
Fix: delete local temporary
pedantic_analyis_options_[timestamp].g.yaml
. -
Upgrade dependencies:
analyzer
to0.36
-
Penalty for too large readme, changelog or example.
-
Penalty for too large
pubspec.yaml
. -
Display calculated health and maintenance scores when
pana
is called with--scores
. -
Ask for example only for packages with public libraries.
-
Deduplicate
dartanalyzer
output lines.
- Support the latest
package:analyzer
.
-
Don't block platform classification on hints.
-
Apply
pedantic
rules without referencingpackage:pedantic
in the inspected package'spubspec.yaml
. -
Warn about insecure (non-
https
) image URLs in markdown content (readme, changelog and example).
-
Link to package layout conventions in example-related suggestions.
-
Use
package:pedantic
as default package analysis ruleset. -
Linear penalties for description.
-
Updated suggestion messages.
- Maintenance score penalty for:
- non-https URLs
git
dependencies- strict parsing errors of
pubspec.yaml
-
Support
--line-length
in command-line and inInspectOptions
(pass-through todartfmt
). -
Fix
pub upgrade
parsing. -
Strict SDK constraint status:
sdk: any
orsdk:
is considered missing constraint- handling cases without upper bound (
sdk: >1.0.0
is rejected by Dart2 latest)
-
Analysis options used in code health scoring updated:
- removed stale options,
- included latest Flutter-enabled lints,
- included latest stagehand-enabled lints.
-
Upgraded to
package:analyzer 0.34.1
, which fixed a NPE. -
Validating
repository
andissue_tracker
URLs.
-
Code cleanup.
-
Reduce the amount of warning+ level log messages when tools fail.
-
Handle package with bad
pubspec.yaml
.
-
Reduce the amount of logging when
dartfmt
fails due to an issue in the package. -
Display Dart SDK warning if package doesn't allow the latest Dart 2.X version.
-
Bulk processing and comparison.
-
Penalty for description using too many non-ASCII characters.
-
Use
--dry-run
on executing flutter format. -
Retry the external process on downloading and listing packages.
-
Use Flutter's internal Dart SDK to run
dartanalyzer
on Flutter packages.
-
Increase the severity of missing SDK constraint.
-
Make
example/readme.md
the first-level example-file candidate. -
Scores values should be consistently in the
[0.0-1.0]
range.
-
Documented how scoring works.
-
Estimate health score penalties.
-
Increased
dartfmt
timeout to 5 minutes. -
Store basic stats in the analysis summary.
-
Detect
example/readme.md
(or similar pattern) as an alternative to single.dart
example.
- Bugfix: pre-v1 release should be pre-v0.1 instead.
- Bugfix: packages without Dart files failed the health checks.
Breaking changes:
-
Named parameters in the following constructors:
Summary
,DartFileSummary
,PkgDependency
,CodeProblem
. -
Removed per-file and overall
Fitness
, using a top-levelHealth
report instead. Follows the proposed changes that allow us to clearly communicate the scoring mechanism. -
Removed
Penalty
and using the simpler to understandscore
in place of it.
Updates:
-
Use
flutter format
for Flutter packages. -
Support relative local path with
--source path
. -
Track tool failures and set health score to 0 if there is any.
-
Support Dart 2 gold release.
-
Remove
strong-mode: true
check and suggestion. -
Do not check existence of non-external URLs.
-
API for external caching of URL existence checks.
- Suggestions for SDK constraint and Dart 2 compatibility.
- Updated report on
dartanalyzer
suggestions.
-
Less verbose logging.
-
Updated platform classification:
- Library conflict rule is moved to the end of the evaluation.
- Top file-related suggestions are directly exposed.
- The bulk summary suggestion is more compact.
-
Updated suggestion messages.
-
Export libraries used by pub site.
-
Update minimum SDK to
2.0.0-dev.42.0
- The SDK was effectively restricted to at least this version due to other dependencies.
-
Better expose platform conflict reasons.
-
Support changing part of the analysis result.
-
Fix
dartdoc
timeout when usingpub global run
.
-
dartdoc
processing: do not exclude packages by default, asdartdoc
0.19
handles SDK links. -
expose
getAgeSuggestion
method for pub site -
Update
analyzer
dependency to^0.32.0
.
-
Upgrade CI to dev.54 and fix new deprecation warnings.
-
Bugfix: do not initialize
dartdocSuccessful
with a value. -
Support
--flutter-sdk
in thepana
binary.
Breaking changes:
-
DartSdk
,FlutterSdk
andPubEnvironment
is replaced withToolEnvironment
. -
ToolEnvironment.runAnalyzer
returns the text output of the process. -
Consolidating options in
InspectOptions
, changingPackageAnalyzer
APIs. -
Move all output-related data structure to
src/model.dart
:CodeProblem.parse
->parseCodeProblem
Maintenance.getMaintenanceScore
->getMaintenanceScore
PkgResolution.create
->createPkgResolution
-
Move all runtime/version info into
PanaRuntimeInfo
(and use it inSummary
). -
Removed
Fitness.suggestions
(moved it toDartFileSummary
)
Updates:
-
Run
dartdoc
(optional) and report if it was not able to complete successfully. -
Added a top-level
models.dart
library exposing several of the data classes. -
Check
homepage
anddocumentation
properties to point to an existing and external web page. -
--verbose
command-line andVerbosity
option to control the details in the analysis output.
-
Enable Dart 2 Preview in analyzer options (including non-Flutter packages).
-
Change platform classification of
dart:isolate
: no longer available onweb
. -
Treat
environment:
keys as dependent SDKs (e.g.flutter
). -
Use
LibraryElement.hasExtUri
to detectdart-ext:
imports. -
Detailed suggestion messages when package has conflicting platforms.
- Enable Dart 2 Preview in Flutter analyzer options.
-
Fix CI test
-
Flutter-specific suggestion messages for
dartfmt
anddartanalyzer
.
-
Fix end-to-end test (package dependency changed).
-
Move pubspec stripping inside
PubEnvironment.runUpgrade
(dartdoc
service will get it for free). -
Handle more repository URLs (e.g.
www.github.com
). -
Expose Flutter detection to clients, with better naming (
isFlutter
->usesFlutter
).
-
Fix issue of not using the
PUB_CACHE
directory when it was set. -
Update
analyzer
to 0.31 and extendsquiver
version range. -
Fix issue where we were not passing the proper package directory variable.
-
Expose all
dartanalyzer
anddartfmt
problems as suggestions.
-
Include component list in platform classification reasons.
-
Do not report on unconstrained SDK dependencies.
-
New platform component:
build
. -
Remove
dependency_overrides
frompubspec.yaml
.
BREAKING CHANGES:
-
Removed
DartPlatform.description
andDartPlatform.descriptionAndReason
because we don't use them elsewhere and complicates thePlatformNames
witheverywhere
andundefined
. -
Removed
PlatformNames.everywhere
andPlatformNames.undefined
, because we don't print these anywhere except in tests. -
Removed
PlatformNames.dartExtension
, because we use it only internally. -
Removed
DartPlatform.restrictedTo
, using the fieldscomponents
anduses
instead. -
Removed
PlatformNames.server
(and its platform detection), using a widerother
platform instead.
-
Use raw links for images in repository URLs.
-
Move unconstrained version penalty from health score to maintenance.
-
Move platform conflict penalty from health score to maintenance.
-
Sort maintenance suggestions in decreasing importance.
- Fix NPE when dependency has no constraint (e.g. git repo).
-
Only direct unconstrained dependencies decrease the health score.
-
Removed superfluous
pubspec.lock
validation. -
Recommend descriptions between 60 and 180 characters.
-
Detect another license format
-
Pass-through values of
analyzer_options.yaml
errors likeuri_has_not_been_generated
.
-
Unblock platform classification on a new class of errors.
-
Better messages in platform classification.
-
Use Flutter-recommended analysis options when analyzer Flutter packages.
-
BREAKING BEHAVIOR: Don't use
PUB_HOSTED_URL
for package downloads, as it has not worked out in practice. Instead, we've added a--hosted-url
command line argument.
-
PackageAnalyzer.inspectPackage
added a named argumentdeleteTemporaryDirectory
. Setting this tofalse
retains the directory and prints its location to the log. Useful for debugging. -
Maintenance
-
BREAKING
getMaintenanceScore
now takes an optionalage
parameter replacing the previously requiredpublishDate
parameter. -
Changed the meaning of version fields:
isExperimentalVersion
now means pre-V1.isPreReleaseVersion
now means there is a pre-release flag like-beta
,-alpha
, etc.
-
BREAKING maintenance-related
Suggestion
entries as moved toMaintenance.suggestions
-
-
BREAKING
Suggestion.file
is nowString
instead ofdynamic
. -
Detect the new format of native extensions.
-
Unblock platform classification on a new class of errors.
-
Use
PUB_HOSTED_URL
for package downloads.
- Allow more versions of
package:args
.
-
Added
pana
as an executable. Enablespub global activate pana
. -
Improved license detection: commented license files are now recognized.
-
Handle more critical exceptions and report them with more details.
-
The
Suggestion.bug
constructor had a breaking change – a required argument was added, but this is not intended for invocation by end-users.
- Add
SuggestionLevel.bug
and use it to record fatal errors with the tool.
- Fixed issue where analyzer and/or formatter were run on directories with no Dart files.
-
Breaking changes
-
Summary.sdkVersion
is now aVersion
instead ofString
. -
new PackageAnalyzer(...)
now takes aDartSdk
instance instead of aString
.
-
-
static Future<PackageAnalyzer> create(...)
was added toPackageAnalyzer
. -
Added
logger
optional argument toPackageAnalyzer.inspectPackage
.
- Allow platform classification for a small class of analysis errors.
- Don't count the absence of an
analysis_options.yaml
file against a package.
-
Breaking changes
- Removed
ToolProblem
class. - Removed
Summary.toolProblems
, in favor ofSummary.suggestions
.
- Removed
-
Detect and store maintenance-related data in summary.
- Scoring of tool problems moved from
Fitness
toMaintenance
.
- Scoring of tool problems moved from
-
Provide human-readable feedback and instructions on some of the issues we find during the analysis.
-
Use a consistent 2 minute timeout for all processes.
-
Classify platform as
nowhere
when part of analysis fails.
-
Breaking changes
License
renamed toLicenseFile
Summary.license
->licenses
: we'll return multiple licenses- Removed
LicenseNames.missing
: empty List will indicate no license file
-
Greatly expanded and improved license detection.
-
Breaking changes
-
Renamed
AnalyzerIssue
->ToolProblem
- Renamed
Summary.issues
->toolProblems
- Renamed
AnalyzerIssue.scope
->tool
- Renamed
AnalyzerScopes
->ToolNames
- Renamed
-
Renamed
AnalyzerOutput
->CodeProblem
- Renamed
Summary.analyzerItems
andDartFileSummary.analyzerItems
->codeProblems
- Renamed
-
Refactored
CodeProblem
(previouslyAnalyzerOutput
):- Split up
type
, new fields:severity
,errorType
,errorCode
- Renamed
error
todescription
- Split up
-
Refactored
Fitness
:- Renamed
total
->magnitude
- Removed
value
, usingshortcoming
instead (value
=magnitude - shortcoming;
)
- Renamed
-
Refactored
PubSummary
, renamed toPkgResolution
- Moved
pubspec
->Summary
- Moved
pkgVersion
->Pubspec.version
- Moved
authors
->Pubspec.authors
- Merged
packageVersions
andavailableVersions
intodependencies
- Renamed
Summary.pubSummary
->pkgResolution
- Moved
-
Refactored
platform
:- Renamed
PlatformFlags
->PlatformNames
- Removed most of the platform-related classes, using
DartPlatform
instead
- Renamed
-
-
Removed
PlatformSummary.package
in favor ofPlatformSummary.pubspec
of (new) typePubspecPlatform
. -
Renamed
KnownPlatforms
toPlatformFlags
. Also:- Removed
mirrors
,browser
andstandalone
. - Renamed
native
todartExtension
.
- Removed
-
PlatformInfo
- Now store
dart:*
references directly inuses
. worksInStandalone
renamed toworksOnServer
.- Other
.worksIn*
renamed toworksOn*
. - Added
String get description
which returns a simpleString
description of the supported platforms. Examples:everywhere
,flutter
,server, web
,conflict
. - Removed
angular
as a value inuses
.
- Now store
-
Detect native extensions.
-
Detect licenses.
-
Lot's of stability improvements.
-
Improvements to error handling.
-
Lot's of cleanup to JSON output.
-
Improved stability.
-
Platform detection basics.
-
Added support for
flutter
packages. -
Expanded analysis to include transitive dependencies.
-
Added scoring library.
-
Moved the repo to
dart-lang
.
- A lot of tweaks. Still under heavy development.
- Initial version.