diff --git a/commitlint.yaml b/commitlint.yaml index f017773e..8aea72a8 100644 --- a/commitlint.yaml +++ b/commitlint.yaml @@ -20,5 +20,6 @@ rules: - neon_news - neon_notes - neon_notifications + - neon_lints - nextcloud - sort_box diff --git a/packages/app/analysis_options.yaml b/packages/app/analysis_options.yaml index c7c10b7d..c3fd4266 100644 --- a/packages/app/analysis_options.yaml +++ b/packages/app/analysis_options.yaml @@ -1 +1 @@ -include: package:nit_picking/flutter.yaml +include: package:neon_lints/flutter.yaml diff --git a/packages/app/pubspec.lock b/packages/app/pubspec.lock index dd04eef6..711b5c4d 100644 --- a/packages/app/pubspec.lock +++ b/packages/app/pubspec.lock @@ -696,6 +696,13 @@ packages: relative: true source: path version: "1.0.0" + neon_lints: + dependency: "direct dev" + description: + path: "../neon_lints" + relative: true + source: path + version: "1.0.0" neon_news: dependency: "direct main" description: @@ -732,15 +739,6 @@ packages: relative: true source: path version: "1.0.0" - nit_picking: - dependency: "direct dev" - description: - path: "." - ref: "0b2ee0d" - resolved-ref: "0b2ee0d6d6871a04aaf85e88cd7e877f654d15e3" - url: "https://github.com/stack11/dart_nit_picking" - source: git - version: "0.0.0" open_file: dependency: transitive description: diff --git a/packages/app/pubspec.yaml b/packages/app/pubspec.yaml index b0bce89a..9cd5b2b7 100644 --- a/packages/app/pubspec.yaml +++ b/packages/app/pubspec.yaml @@ -39,10 +39,10 @@ dev_dependencies: integration_test: sdk: flutter material_design_icons_flutter: ^7.0.7296 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints flutter: uses-material-design: true diff --git a/packages/app/pubspec_overrides.yaml b/packages/app/pubspec_overrides.yaml index 42527add..7bd861e4 100644 --- a/packages/app/pubspec_overrides.yaml +++ b/packages/app/pubspec_overrides.yaml @@ -1,4 +1,4 @@ -# melos_managed_dependency_overrides: dynamite_runtime,file_icons,neon,neon_files,neon_news,neon_notes,neon_notifications,nextcloud,sort_box +# melos_managed_dependency_overrides: dynamite_runtime,file_icons,neon,neon_files,neon_news,neon_notes,neon_notifications,nextcloud,sort_box,neon_lints dependency_overrides: dynamite_runtime: path: ../dynamite/dynamite_runtime @@ -8,6 +8,8 @@ dependency_overrides: path: ../neon/neon neon_files: path: ../neon/neon_files + neon_lints: + path: ../neon_lints neon_news: path: ../neon/neon_news neon_notes: diff --git a/packages/dynamite/dynamite/analysis_options.yaml b/packages/dynamite/dynamite/analysis_options.yaml index 6549e762..80216cb3 100644 --- a/packages/dynamite/dynamite/analysis_options.yaml +++ b/packages/dynamite/dynamite/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:nit_picking/dart.yaml +include: package:neon_lints/dart.yaml linter: rules: diff --git a/packages/dynamite/dynamite/lib/src/openapi_builder.dart b/packages/dynamite/dynamite/lib/src/openapi_builder.dart index 8ba4428c..fc541c86 100644 --- a/packages/dynamite/dynamite/lib/src/openapi_builder.dart +++ b/packages/dynamite/dynamite/lib/src/openapi_builder.dart @@ -477,17 +477,14 @@ class OpenAPIBuilder implements Builder { code.write( "path = path.replaceAll('{${parameter.name}}', Uri.encodeQueryComponent($value));", ); - break; case 'query': code.write( "queryParameters['${parameter.name}'] = $value;", ); - break; case 'header': code.write( "headers['${parameter.name}'] = $value;", ); - break; default: throw Exception('Can not work with parameter in "${parameter.in_}"'); } @@ -549,7 +546,6 @@ class OpenAPIBuilder implements Builder { if (dartParameterNullable) { code.write('}'); } - break; default: throw Exception('Can not parse mime type "$mimeType"'); } @@ -1206,7 +1202,6 @@ TypeResult resolveObject( 'result.${_toDartName(propertyName)} = value!;', ), ], - const Code('break;'), ]; } @@ -1548,19 +1543,16 @@ TypeResult resolveType( 'bool', nullable: nullable, ); - break; case 'integer': result = TypeResultBase( 'int', nullable: nullable, ); - break; case 'number': result = TypeResultBase( 'num', nullable: nullable, ); - break; case 'string': switch (schema.format) { case 'binary': @@ -1568,14 +1560,12 @@ TypeResult resolveType( 'Uint8List', nullable: nullable, ); - break; } result = TypeResultBase( 'String', nullable: nullable, ); - break; case 'array': if (schema.items != null) { final subResult = resolveType( @@ -1597,7 +1587,6 @@ TypeResult resolveType( nullable: nullable, ); } - break; case 'object': if (schema.properties == null) { if (schema.additionalProperties != null) { @@ -1646,7 +1635,6 @@ TypeResult resolveType( schema, nullable: nullable, ); - break; } } diff --git a/packages/dynamite/dynamite/lib/src/type_result/base.dart b/packages/dynamite/dynamite/lib/src/type_result/base.dart index 13c2218e..cec6ccef 100644 --- a/packages/dynamite/dynamite/lib/src/type_result/base.dart +++ b/packages/dynamite/dynamite/lib/src/type_result/base.dart @@ -3,7 +3,7 @@ part of 'type_result.dart'; @immutable class TypeResultBase extends TypeResult { TypeResultBase( - super.name, { + super.className, { super.nullable, }); @@ -47,7 +47,6 @@ class TypeResultBase extends TypeResult { switch (name) { case 'JsonObject': dartName = 'dynamic'; - break; default: dartName = name; } diff --git a/packages/dynamite/dynamite/lib/src/type_result/enum.dart b/packages/dynamite/dynamite/lib/src/type_result/enum.dart index 9aab53c1..805f9253 100644 --- a/packages/dynamite/dynamite/lib/src/type_result/enum.dart +++ b/packages/dynamite/dynamite/lib/src/type_result/enum.dart @@ -3,7 +3,7 @@ part of 'type_result.dart'; @immutable class TypeResultEnum extends TypeResult { TypeResultEnum( - super.name, + super.className, this.subType, { super.nullable, }); diff --git a/packages/dynamite/dynamite/lib/src/type_result/list.dart b/packages/dynamite/dynamite/lib/src/type_result/list.dart index 01230c91..c56f2731 100644 --- a/packages/dynamite/dynamite/lib/src/type_result/list.dart +++ b/packages/dynamite/dynamite/lib/src/type_result/list.dart @@ -3,7 +3,7 @@ part of 'type_result.dart'; @immutable class TypeResultList extends TypeResult { TypeResultList( - super.name, + super.className, final TypeResult subType, { super.nullable, }) : super(generics: [subType]); diff --git a/packages/dynamite/dynamite/lib/src/type_result/map.dart b/packages/dynamite/dynamite/lib/src/type_result/map.dart index 683ff9b1..ce18b15b 100644 --- a/packages/dynamite/dynamite/lib/src/type_result/map.dart +++ b/packages/dynamite/dynamite/lib/src/type_result/map.dart @@ -3,7 +3,7 @@ part of 'type_result.dart'; @immutable class TypeResultMap extends TypeResult { TypeResultMap( - super.name, + super.className, final TypeResult subType, { super.nullable, }) : super(generics: [TypeResultBase('String'), subType]); diff --git a/packages/dynamite/dynamite/pubspec.yaml b/packages/dynamite/dynamite/pubspec.yaml index 36cd1277..aecf4d09 100644 --- a/packages/dynamite/dynamite/pubspec.yaml +++ b/packages/dynamite/dynamite/pubspec.yaml @@ -20,8 +20,8 @@ dev_dependencies: built_collection: ^5.1.1 built_value_generator: ^8.5.0 json_serializable: ^6.6.2 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints test: ^1.24.2 diff --git a/packages/dynamite/dynamite/pubspec_overrides.yaml b/packages/dynamite/dynamite/pubspec_overrides.yaml new file mode 100644 index 00000000..acded63f --- /dev/null +++ b/packages/dynamite/dynamite/pubspec_overrides.yaml @@ -0,0 +1,4 @@ +# melos_managed_dependency_overrides: neon_lints +dependency_overrides: + neon_lints: + path: ../../neon_lints diff --git a/packages/dynamite/dynamite_runtime/analysis_options.yaml b/packages/dynamite/dynamite_runtime/analysis_options.yaml index 6549e762..80216cb3 100644 --- a/packages/dynamite/dynamite_runtime/analysis_options.yaml +++ b/packages/dynamite/dynamite_runtime/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:nit_picking/dart.yaml +include: package:neon_lints/dart.yaml linter: rules: diff --git a/packages/dynamite/dynamite_runtime/pubspec.yaml b/packages/dynamite/dynamite_runtime/pubspec.yaml index addb6b13..0cfa49ff 100644 --- a/packages/dynamite/dynamite_runtime/pubspec.yaml +++ b/packages/dynamite/dynamite_runtime/pubspec.yaml @@ -14,8 +14,8 @@ dev_dependencies: build_runner: ^2.4.2 built_collection: ^5.1.1 built_value_generator: ^8.5.0 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints test: ^1.24.2 diff --git a/packages/dynamite/dynamite_runtime/pubspec_overrides.yaml b/packages/dynamite/dynamite_runtime/pubspec_overrides.yaml new file mode 100644 index 00000000..acded63f --- /dev/null +++ b/packages/dynamite/dynamite_runtime/pubspec_overrides.yaml @@ -0,0 +1,4 @@ +# melos_managed_dependency_overrides: neon_lints +dependency_overrides: + neon_lints: + path: ../../neon_lints diff --git a/packages/file_icons/analysis_options.yaml b/packages/file_icons/analysis_options.yaml index 0ed2fb9f..4db3c296 100644 --- a/packages/file_icons/analysis_options.yaml +++ b/packages/file_icons/analysis_options.yaml @@ -1 +1 @@ -include: package:nit_picking/dart.yaml +include: package:neon_lints/dart.yaml diff --git a/packages/file_icons/pubspec.yaml b/packages/file_icons/pubspec.yaml index 955993f4..42225e35 100644 --- a/packages/file_icons/pubspec.yaml +++ b/packages/file_icons/pubspec.yaml @@ -11,10 +11,10 @@ dependencies: path: ^1.8.3 dev_dependencies: - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints flutter: fonts: diff --git a/packages/file_icons/pubspec_overrides.yaml b/packages/file_icons/pubspec_overrides.yaml new file mode 100644 index 00000000..4abc9fdc --- /dev/null +++ b/packages/file_icons/pubspec_overrides.yaml @@ -0,0 +1,4 @@ +# melos_managed_dependency_overrides: neon_lints +dependency_overrides: + neon_lints: + path: ../neon_lints diff --git a/packages/neon/neon/analysis_options.yaml b/packages/neon/neon/analysis_options.yaml index b5cc8bc5..66de1efd 100644 --- a/packages/neon/neon/analysis_options.yaml +++ b/packages/neon/neon/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:nit_picking/flutter.yaml +include: package:neon_lints/flutter.yaml analyzer: exclude: diff --git a/packages/neon/neon/pubspec.yaml b/packages/neon/neon/pubspec.yaml index eac2e288..48a7d067 100644 --- a/packages/neon/neon/pubspec.yaml +++ b/packages/neon/neon/pubspec.yaml @@ -61,10 +61,10 @@ dev_dependencies: go_router_builder: ^2.2.1 json_serializable: ^6.6.2 mocktail: ^1.0.0 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints test: ^1.24.3 flutter: diff --git a/packages/neon/neon/pubspec_overrides.yaml b/packages/neon/neon/pubspec_overrides.yaml index 2e927e31..3ea13b42 100644 --- a/packages/neon/neon/pubspec_overrides.yaml +++ b/packages/neon/neon/pubspec_overrides.yaml @@ -1,7 +1,9 @@ -# melos_managed_dependency_overrides: dynamite_runtime,nextcloud,sort_box +# melos_managed_dependency_overrides: dynamite_runtime,nextcloud,sort_box,neon_lints dependency_overrides: dynamite_runtime: path: ../../dynamite/dynamite_runtime + neon_lints: + path: ../../neon_lints nextcloud: path: ../../nextcloud sort_box: diff --git a/packages/neon/neon_files/analysis_options.yaml b/packages/neon/neon_files/analysis_options.yaml index b5cc8bc5..66de1efd 100644 --- a/packages/neon/neon_files/analysis_options.yaml +++ b/packages/neon/neon_files/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:nit_picking/flutter.yaml +include: package:neon_lints/flutter.yaml analyzer: exclude: diff --git a/packages/neon/neon_files/lib/widgets/actions.dart b/packages/neon/neon_files/lib/widgets/actions.dart index 59896af1..334228e6 100644 --- a/packages/neon/neon_files/lib/widgets/actions.dart +++ b/packages/neon/neon_files/lib/widgets/actions.dart @@ -23,7 +23,6 @@ class FileActions extends StatelessWidget { } else { bloc.addFavorite(details.path); } - break; case FilesFileAction.details: await Navigator.of(context).push( MaterialPageRoute( @@ -33,7 +32,6 @@ class FileActions extends StatelessWidget { ), ), ); - break; case FilesFileAction.rename: final result = await showRenameDialog( context: context, @@ -44,7 +42,6 @@ class FileActions extends StatelessWidget { if (result != null) { bloc.rename(details.path, result); } - break; case FilesFileAction.move: final b = bloc.getNewFilesBrowserBloc(); final originalPath = details.path.sublist(0, details.path.length - 1); @@ -61,7 +58,6 @@ class FileActions extends StatelessWidget { if (result != null) { bloc.move(details.path, result..add(details.name)); } - break; case FilesFileAction.copy: final b = bloc.getNewFilesBrowserBloc(); final originalPath = details.path.sublist(0, details.path.length - 1); @@ -78,7 +74,6 @@ class FileActions extends StatelessWidget { if (result != null) { bloc.copy(details.path, result..add(details.name)); } - break; case FilesFileAction.sync: final sizeWarning = browserBloc.options.downloadSizeWarning.value; if (sizeWarning != null && details.size != null && details.size! > sizeWarning) { @@ -93,7 +88,6 @@ class FileActions extends StatelessWidget { } } bloc.syncFile(details.path); - break; case FilesFileAction.delete: if (await showConfirmationDialog( context, @@ -103,7 +97,6 @@ class FileActions extends StatelessWidget { )) { bloc.delete(details.path); } - break; } } diff --git a/packages/neon/neon_files/pubspec.yaml b/packages/neon/neon_files/pubspec.yaml index 19ecb35f..5df598f7 100644 --- a/packages/neon/neon_files/pubspec.yaml +++ b/packages/neon/neon_files/pubspec.yaml @@ -34,10 +34,10 @@ dependencies: dev_dependencies: build_runner: ^2.4.4 go_router_builder: ^2.2.1 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints flutter: uses-material-design: true diff --git a/packages/neon/neon_files/pubspec_overrides.yaml b/packages/neon/neon_files/pubspec_overrides.yaml index 478e62f5..84933267 100644 --- a/packages/neon/neon_files/pubspec_overrides.yaml +++ b/packages/neon/neon_files/pubspec_overrides.yaml @@ -1,4 +1,4 @@ -# melos_managed_dependency_overrides: dynamite_runtime,file_icons,neon,nextcloud,sort_box +# melos_managed_dependency_overrides: dynamite_runtime,file_icons,neon,nextcloud,sort_box,neon_lints dependency_overrides: dynamite_runtime: path: ../../dynamite/dynamite_runtime @@ -6,6 +6,8 @@ dependency_overrides: path: ../../file_icons neon: path: ../neon + neon_lints: + path: ../../neon_lints nextcloud: path: ../../nextcloud sort_box: diff --git a/packages/neon/neon_news/analysis_options.yaml b/packages/neon/neon_news/analysis_options.yaml index b5cc8bc5..66de1efd 100644 --- a/packages/neon/neon_news/analysis_options.yaml +++ b/packages/neon/neon_news/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:nit_picking/flutter.yaml +include: package:neon_lints/flutter.yaml analyzer: exclude: diff --git a/packages/neon/neon_news/lib/blocs/articles.dart b/packages/neon/neon_news/lib/blocs/articles.dart index af014c09..210a2492 100644 --- a/packages/neon/neon_news/lib/blocs/articles.dart +++ b/packages/neon/neon_news/lib/blocs/articles.dart @@ -31,7 +31,7 @@ abstract class NewsArticlesBlocStates { class NewsMainArticlesBloc extends NewsArticlesBloc { NewsMainArticlesBloc( - super.newsBloc, + super._newsBloc, super.options, super.requestManager, super.account, @@ -98,7 +98,6 @@ class NewsArticlesBloc extends InteractiveBloc implements NewsArticlesBlocEvents break; case FilterType.unread: getRead = false; - break; default: throw Exception('FilterType ${filterType.value} not allowed'); } @@ -106,23 +105,17 @@ class NewsArticlesBloc extends InteractiveBloc implements NewsArticlesBlocEvents switch (listType) { case ListType.feed: type = NewsListType.feed; - break; case ListType.folder: type = NewsListType.folder; - break; case null: switch (filterType.value) { case FilterType.starred: type = NewsListType.starred; - break; case FilterType.all: type = NewsListType.allItems; - break; case FilterType.unread: type = NewsListType.unread; - break; } - break; } await requestManager.wrapNextcloud, NewsListArticles>( diff --git a/packages/neon/neon_news/lib/widgets/articles_view.dart b/packages/neon/neon_news/lib/widgets/articles_view.dart index acd85c21..1c63cf79 100644 --- a/packages/neon/neon_news/lib/widgets/articles_view.dart +++ b/packages/neon/neon_news/lib/widgets/articles_view.dart @@ -70,13 +70,10 @@ class _NewsArticlesViewState extends State { switch (a) { case FilterType.all: label = AppLocalizations.of(context).articlesFilterAll; - break; case FilterType.unread: label = AppLocalizations.of(context).articlesFilterUnread; - break; case FilterType.starred: label = AppLocalizations.of(context).articlesFilterStarred; - break; default: throw Exception('FilterType $a should not be shown'); } diff --git a/packages/neon/neon_news/lib/widgets/feeds_view.dart b/packages/neon/neon_news/lib/widgets/feeds_view.dart index 850e5e83..ddebd570 100644 --- a/packages/neon/neon_news/lib/widgets/feeds_view.dart +++ b/packages/neon/neon_news/lib/widgets/feeds_view.dart @@ -111,7 +111,6 @@ class NewsFeedsView extends StatelessWidget { feed: feed, ), ); - break; case NewsFeedAction.delete: if (await showConfirmationDialog( context, @@ -119,7 +118,6 @@ class NewsFeedsView extends StatelessWidget { )) { bloc.removeFeed(feed.id); } - break; case NewsFeedAction.rename: final result = await showRenameDialog( context: context, @@ -129,7 +127,6 @@ class NewsFeedsView extends StatelessWidget { if (result != null) { bloc.renameFeed(feed.id, result); } - break; case NewsFeedAction.move: final result = await showDialog>( context: context, @@ -141,7 +138,6 @@ class NewsFeedsView extends StatelessWidget { if (result != null) { bloc.moveFeed(feed.id, result[0]); } - break; } }, ), diff --git a/packages/neon/neon_news/lib/widgets/folders_view.dart b/packages/neon/neon_news/lib/widgets/folders_view.dart index 9fafc7e7..5b308663 100644 --- a/packages/neon/neon_news/lib/widgets/folders_view.dart +++ b/packages/neon/neon_news/lib/widgets/folders_view.dart @@ -92,7 +92,6 @@ class NewsFoldersView extends StatelessWidget { )) { bloc.deleteFolder(folder.id); } - break; case NewsFolderAction.rename: final result = await showRenameDialog( context: context, @@ -102,7 +101,6 @@ class NewsFoldersView extends StatelessWidget { if (result != null) { bloc.renameFolder(folder.id, result); } - break; } }, ), diff --git a/packages/neon/neon_news/pubspec.yaml b/packages/neon/neon_news/pubspec.yaml index 77d2cf28..78333b1d 100644 --- a/packages/neon/neon_news/pubspec.yaml +++ b/packages/neon/neon_news/pubspec.yaml @@ -27,10 +27,10 @@ dependencies: dev_dependencies: build_runner: ^2.4.4 go_router_builder: ^2.2.1 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints flutter: uses-material-design: true diff --git a/packages/neon/neon_news/pubspec_overrides.yaml b/packages/neon/neon_news/pubspec_overrides.yaml index bc921fe9..3bec69c6 100644 --- a/packages/neon/neon_news/pubspec_overrides.yaml +++ b/packages/neon/neon_news/pubspec_overrides.yaml @@ -1,9 +1,11 @@ -# melos_managed_dependency_overrides: dynamite_runtime,neon,nextcloud,sort_box +# melos_managed_dependency_overrides: dynamite_runtime,neon,nextcloud,sort_box,neon_lints dependency_overrides: dynamite_runtime: path: ../../dynamite/dynamite_runtime neon: path: ../neon + neon_lints: + path: ../../neon_lints nextcloud: path: ../../nextcloud sort_box: diff --git a/packages/neon/neon_notes/analysis_options.yaml b/packages/neon/neon_notes/analysis_options.yaml index b5cc8bc5..66de1efd 100644 --- a/packages/neon/neon_notes/analysis_options.yaml +++ b/packages/neon/neon_notes/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:nit_picking/flutter.yaml +include: package:neon_lints/flutter.yaml analyzer: exclude: diff --git a/packages/neon/neon_notes/pubspec.yaml b/packages/neon/neon_notes/pubspec.yaml index 3e51d18b..7e6c7d9b 100644 --- a/packages/neon/neon_notes/pubspec.yaml +++ b/packages/neon/neon_notes/pubspec.yaml @@ -27,10 +27,10 @@ dependencies: dev_dependencies: build_runner: ^2.4.4 go_router_builder: ^2.2.1 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints flutter: uses-material-design: true diff --git a/packages/neon/neon_notes/pubspec_overrides.yaml b/packages/neon/neon_notes/pubspec_overrides.yaml index bc921fe9..3bec69c6 100644 --- a/packages/neon/neon_notes/pubspec_overrides.yaml +++ b/packages/neon/neon_notes/pubspec_overrides.yaml @@ -1,9 +1,11 @@ -# melos_managed_dependency_overrides: dynamite_runtime,neon,nextcloud,sort_box +# melos_managed_dependency_overrides: dynamite_runtime,neon,nextcloud,sort_box,neon_lints dependency_overrides: dynamite_runtime: path: ../../dynamite/dynamite_runtime neon: path: ../neon + neon_lints: + path: ../../neon_lints nextcloud: path: ../../nextcloud sort_box: diff --git a/packages/neon/neon_notifications/analysis_options.yaml b/packages/neon/neon_notifications/analysis_options.yaml index b5cc8bc5..66de1efd 100644 --- a/packages/neon/neon_notifications/analysis_options.yaml +++ b/packages/neon/neon_notifications/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:nit_picking/flutter.yaml +include: package:neon_lints/flutter.yaml analyzer: exclude: diff --git a/packages/neon/neon_notifications/pubspec.yaml b/packages/neon/neon_notifications/pubspec.yaml index 4d5a3727..89040b64 100644 --- a/packages/neon/neon_notifications/pubspec.yaml +++ b/packages/neon/neon_notifications/pubspec.yaml @@ -21,10 +21,10 @@ dependencies: dev_dependencies: build_runner: ^2.4.4 go_router_builder: ^2.2.1 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints flutter: uses-material-design: true diff --git a/packages/neon/neon_notifications/pubspec_overrides.yaml b/packages/neon/neon_notifications/pubspec_overrides.yaml index bc921fe9..3bec69c6 100644 --- a/packages/neon/neon_notifications/pubspec_overrides.yaml +++ b/packages/neon/neon_notifications/pubspec_overrides.yaml @@ -1,9 +1,11 @@ -# melos_managed_dependency_overrides: dynamite_runtime,neon,nextcloud,sort_box +# melos_managed_dependency_overrides: dynamite_runtime,neon,nextcloud,sort_box,neon_lints dependency_overrides: dynamite_runtime: path: ../../dynamite/dynamite_runtime neon: path: ../neon + neon_lints: + path: ../../neon_lints nextcloud: path: ../../nextcloud sort_box: diff --git a/packages/neon_lints/.gitignore b/packages/neon_lints/.gitignore new file mode 100644 index 00000000..840b0cc8 --- /dev/null +++ b/packages/neon_lints/.gitignore @@ -0,0 +1,12 @@ +# Files and directories created by pub. +.dart_tool/ +.packages + +# Conventional directory for build outputs. +build/ + +# Omit committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock + +coverage/ diff --git a/packages/neon_lints/CHANGELOG.md b/packages/neon_lints/CHANGELOG.md new file mode 100644 index 00000000..effe43c8 --- /dev/null +++ b/packages/neon_lints/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/neon_lints/README.md b/packages/neon_lints/README.md new file mode 100644 index 00000000..846963e0 --- /dev/null +++ b/packages/neon_lints/README.md @@ -0,0 +1,8 @@ +A package containing a very strict set of linting rules. + +### Update rules: +To update the rules you need to update the `commitHash` variable in [neon_lints.dart](bin/neon_lints.dart) and execute it by running: +```sh +fvm dart run bin/neon_lints.dart +``` + diff --git a/packages/neon_lints/analysis_options.yaml b/packages/neon_lints/analysis_options.yaml new file mode 120000 index 00000000..38b1608a --- /dev/null +++ b/packages/neon_lints/analysis_options.yaml @@ -0,0 +1 @@ +lib/dart.yaml \ No newline at end of file diff --git a/packages/neon_lints/bin/neon_lints.dart b/packages/neon_lints/bin/neon_lints.dart new file mode 100644 index 00000000..ff62cd2e --- /dev/null +++ b/packages/neon_lints/bin/neon_lints.dart @@ -0,0 +1,67 @@ +import 'dart:io'; + +import 'package:http/http.dart' as http; +import 'package:yaml/yaml.dart'; + +/// Disabled rules. +/// +/// These rules will be added but disabled. +const disabledRules = [ + 'always_specify_types', + 'avoid_annotating_with_dynamic', + 'avoid_as', + 'avoid_catches_without_on_clauses', + 'avoid_catching_errors', + 'avoid_classes_with_only_static_members', + 'avoid_final_parameters', + 'avoid_print', + 'diagnostic_describe_all_properties', + 'lines_longer_than_80_chars', + 'no_default_cases', + 'one_member_abstracts', + 'prefer_double_quotes', + 'prefer_relative_imports', + 'unnecessary_final', +]; + +/// Rules that won't be added to the list. +/// +/// This is needed for rules not yet available in the current dart version. +const excludedRules = [ + 'no_self_assignments', + 'no_wildcard_variable_uses', +]; + +/// Commit hash to use to fetch the rules from upstream +const commitHash = '7f40f11'; + +Future main() async { + final uri = Uri.parse('https://raw.githubusercontent.com/dart-lang/linter/$commitHash/example/all.yaml'); + final result = await http.get(uri); + final document = loadYaml(result.body) as YamlMap; + final rules = (document['linter'] as YamlMap)['rules'] as YamlList; + + final buffer = StringBuffer(''' +analyzer: + language: + strict-casts: true + errors: + flutter_style_todos: ignore + todo: ignore + exclude: + - "**.g.dart" + - "**.mocks.dart" +linter: + rules: +'''); + + for (final line in rules) { + final excluded = excludedRules.contains(line); + if (!excluded) { + final disabled = disabledRules.contains(line); + buffer.writeln(' $line: ${!disabled}'); + } + } + + File('lib/dart.yaml').writeAsStringSync(buffer.toString()); +} diff --git a/packages/neon_lints/lib/dart.yaml b/packages/neon_lints/lib/dart.yaml new file mode 100644 index 00000000..881999a4 --- /dev/null +++ b/packages/neon_lints/lib/dart.yaml @@ -0,0 +1,225 @@ +analyzer: + language: + strict-casts: true + errors: + flutter_style_todos: ignore + todo: ignore + exclude: + - "**.g.dart" + - "**.mocks.dart" +linter: + rules: + always_declare_return_types: true + always_put_control_body_on_new_line: true + always_put_required_named_parameters_first: true + always_specify_types: false + always_use_package_imports: true + annotate_overrides: true + avoid_annotating_with_dynamic: false + avoid_bool_literals_in_conditional_expressions: true + avoid_catches_without_on_clauses: false + avoid_catching_errors: false + avoid_classes_with_only_static_members: false + avoid_double_and_int_checks: true + avoid_dynamic_calls: true + avoid_empty_else: true + avoid_equals_and_hash_code_on_mutable_classes: true + avoid_escaping_inner_quotes: true + avoid_field_initializers_in_const_classes: true + avoid_final_parameters: false + avoid_function_literals_in_foreach_calls: true + avoid_implementing_value_types: true + avoid_init_to_null: true + avoid_js_rounded_ints: true + avoid_multiple_declarations_per_line: true + avoid_null_checks_in_equality_operators: true + avoid_positional_boolean_parameters: true + avoid_print: false + avoid_private_typedef_functions: true + avoid_redundant_argument_values: true + avoid_relative_lib_imports: true + avoid_renaming_method_parameters: true + avoid_return_types_on_setters: true + avoid_returning_null_for_void: true + avoid_returning_this: true + avoid_setters_without_getters: true + avoid_shadowing_type_parameters: true + avoid_single_cascade_in_expression_statements: true + avoid_slow_async_io: true + avoid_type_to_string: true + avoid_types_as_parameter_names: true + avoid_types_on_closure_parameters: true + avoid_unnecessary_containers: true + avoid_unused_constructor_parameters: true + avoid_void_async: true + avoid_web_libraries_in_flutter: true + await_only_futures: true + camel_case_extensions: true + camel_case_types: true + cancel_subscriptions: true + cascade_invocations: true + cast_nullable_to_non_nullable: true + close_sinks: true + collection_methods_unrelated_type: true + combinators_ordering: true + comment_references: true + conditional_uri_does_not_exist: true + constant_identifier_names: true + control_flow_in_finally: true + curly_braces_in_flow_control_structures: true + dangling_library_doc_comments: true + depend_on_referenced_packages: true + deprecated_consistency: true + deprecated_member_use_from_same_package: true + diagnostic_describe_all_properties: false + directives_ordering: true + discarded_futures: true + do_not_use_environment: true + empty_catches: true + empty_constructor_bodies: true + empty_statements: true + eol_at_end_of_file: true + exhaustive_cases: true + file_names: true + flutter_style_todos: true + hash_and_equals: true + implementation_imports: true + implicit_call_tearoffs: true + implicit_reopen: true + invalid_case_patterns: true + join_return_with_assignment: true + leading_newlines_in_multiline_strings: true + library_annotations: true + library_names: true + library_prefixes: true + library_private_types_in_public_api: true + lines_longer_than_80_chars: false + literal_only_boolean_expressions: true + matching_super_parameters: true + missing_whitespace_between_adjacent_strings: true + no_adjacent_strings_in_list: true + no_default_cases: false + no_duplicate_case_values: true + no_leading_underscores_for_library_prefixes: true + no_leading_underscores_for_local_identifiers: true + no_literal_bool_comparisons: true + no_logic_in_create_state: true + no_runtimeType_toString: true + non_constant_identifier_names: true + noop_primitive_operations: true + null_check_on_nullable_type_parameter: true + null_closures: true + omit_local_variable_types: true + one_member_abstracts: false + only_throw_errors: true + overridden_fields: true + package_api_docs: true + package_names: true + package_prefixed_library_names: true + parameter_assignments: true + prefer_adjacent_string_concatenation: true + prefer_asserts_in_initializer_lists: true + prefer_asserts_with_message: true + prefer_collection_literals: true + prefer_conditional_assignment: true + prefer_const_constructors: true + prefer_const_constructors_in_immutables: true + prefer_const_declarations: true + prefer_const_literals_to_create_immutables: true + prefer_constructors_over_static_methods: true + prefer_contains: true + prefer_double_quotes: false + prefer_expression_function_bodies: true + prefer_final_fields: true + prefer_final_in_for_each: true + prefer_final_locals: true + prefer_final_parameters: true + prefer_for_elements_to_map_fromIterable: true + prefer_foreach: true + prefer_function_declarations_over_variables: true + prefer_generic_function_type_aliases: true + prefer_if_elements_to_conditional_expressions: true + prefer_if_null_operators: true + prefer_initializing_formals: true + prefer_inlined_adds: true + prefer_int_literals: true + prefer_interpolation_to_compose_strings: true + prefer_is_empty: true + prefer_is_not_empty: true + prefer_is_not_operator: true + prefer_iterable_whereType: true + prefer_mixin: true + prefer_null_aware_method_calls: true + prefer_null_aware_operators: true + prefer_relative_imports: false + prefer_single_quotes: true + prefer_spread_collections: true + prefer_typing_uninitialized_variables: true + prefer_void_to_null: true + provide_deprecation_message: true + public_member_api_docs: true + recursive_getters: true + require_trailing_commas: true + secure_pubspec_urls: true + sized_box_for_whitespace: true + sized_box_shrink_expand: true + slash_for_doc_comments: true + sort_child_properties_last: true + sort_constructors_first: true + sort_pub_dependencies: true + sort_unnamed_constructors_first: true + test_types_in_equals: true + throw_in_finally: true + tighten_type_of_initializing_formals: true + type_annotate_public_apis: true + type_init_formals: true + type_literal_in_constant_pattern: true + unawaited_futures: true + unnecessary_await_in_return: true + unnecessary_brace_in_string_interps: true + unnecessary_breaks: true + unnecessary_const: true + unnecessary_constructor_name: true + unnecessary_final: false + unnecessary_getters_setters: true + unnecessary_lambdas: true + unnecessary_late: true + unnecessary_library_directive: true + unnecessary_new: true + unnecessary_null_aware_assignments: true + unnecessary_null_aware_operator_on_extension_on_nullable: true + unnecessary_null_checks: true + unnecessary_null_in_if_null_operators: true + unnecessary_nullable_for_final_variable_declarations: true + unnecessary_overrides: true + unnecessary_parenthesis: true + unnecessary_raw_strings: true + unnecessary_statements: true + unnecessary_string_escapes: true + unnecessary_string_interpolations: true + unnecessary_this: true + unnecessary_to_list_in_spreads: true + unreachable_from_main: true + unrelated_type_equality_checks: true + unsafe_html: true + use_build_context_synchronously: true + use_colored_box: true + use_decorated_box: true + use_enums: true + use_full_hex_values_for_flutter_colors: true + use_function_type_syntax_for_parameters: true + use_if_null_to_convert_nulls_to_bools: true + use_is_even_rather_than_modulo: true + use_key_in_widget_constructors: true + use_late_for_private_fields_and_variables: true + use_named_constants: true + use_raw_strings: true + use_rethrow_when_possible: true + use_setters_to_change_properties: true + use_string_buffers: true + use_string_in_part_of_directives: true + use_super_parameters: true + use_test_throws_matchers: true + use_to_and_as_if_applicable: true + valid_regexps: true + void_checks: true diff --git a/packages/neon_lints/lib/flutter.yaml b/packages/neon_lints/lib/flutter.yaml new file mode 100644 index 00000000..46ae78a6 --- /dev/null +++ b/packages/neon_lints/lib/flutter.yaml @@ -0,0 +1,9 @@ +include: package:neon_lints/dart.yaml +linter: + rules: + public_member_api_docs: false + library_private_types_in_public_api: false + avoid_print: true +analyzer: + exclude: + - 'lib/generated_plugin_registrant.dart' diff --git a/packages/neon_lints/pubspec.yaml b/packages/neon_lints/pubspec.yaml new file mode 100644 index 00000000..7b10089f --- /dev/null +++ b/packages/neon_lints/pubspec.yaml @@ -0,0 +1,10 @@ +name: neon_lints +description: Linting package used in the nextcloud-neon project +version: 1.0.0 + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + http: ^1.1.0 + yaml: ^3.1.2 diff --git a/packages/nextcloud/analysis_options.yaml b/packages/nextcloud/analysis_options.yaml index 0ed2fb9f..4db3c296 100644 --- a/packages/nextcloud/analysis_options.yaml +++ b/packages/nextcloud/analysis_options.yaml @@ -1 +1 @@ -include: package:nit_picking/dart.yaml +include: package:neon_lints/dart.yaml diff --git a/packages/nextcloud/lib/src/api/core.openapi.dart b/packages/nextcloud/lib/src/api/core.openapi.dart index 83b48f85..c0b0922f 100644 --- a/packages/nextcloud/lib/src/api/core.openapi.dart +++ b/packages/nextcloud/lib/src/api/core.openapi.dart @@ -2308,7 +2308,6 @@ class _$CoreAvatarAvatarGetAvatarDarkHeadersSerializer switch (key) { case 'x-nc-iscustomavatar': result.xNcIscustomavatar = int.parse(value); - break; } } @@ -2371,7 +2370,6 @@ class _$CoreAvatarAvatarGetAvatarHeadersSerializer implements StructuredSerializ switch (key) { case 'x-nc-iscustomavatar': result.xNcIscustomavatar = int.parse(value); - break; } } diff --git a/packages/nextcloud/lib/src/api/files_sharing.openapi.dart b/packages/nextcloud/lib/src/api/files_sharing.openapi.dart index 1ae675ed..ba9f4b4c 100644 --- a/packages/nextcloud/lib/src/api/files_sharing.openapi.dart +++ b/packages/nextcloud/lib/src/api/files_sharing.openapi.dart @@ -2410,7 +2410,6 @@ class _$FilesSharingShareesapiShareesapiSearchHeadersSerializer switch (key) { case 'link': result.link = value; - break; } } diff --git a/packages/nextcloud/lib/src/api/settings.openapi.dart b/packages/nextcloud/lib/src/api/settings.openapi.dart index e03bb395..3261c3a2 100644 --- a/packages/nextcloud/lib/src/api/settings.openapi.dart +++ b/packages/nextcloud/lib/src/api/settings.openapi.dart @@ -182,7 +182,6 @@ class _$SettingsLogSettingsLogSettingsDownloadHeadersSerializer switch (key) { case 'content-disposition': result.contentDisposition = value; - break; } } diff --git a/packages/nextcloud/pubspec.yaml b/packages/nextcloud/pubspec.yaml index d145c0f1..cab07fe6 100644 --- a/packages/nextcloud/pubspec.yaml +++ b/packages/nextcloud/pubspec.yaml @@ -30,10 +30,10 @@ dev_dependencies: url: https://github.com/nextcloud/neon path: packages/dynamite/dynamite json_serializable: ^6.6.2 - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints process_run: ^0.13.0 test: ^1.24.2 xml_serializable: ^2.2.2 diff --git a/packages/nextcloud/pubspec_overrides.yaml b/packages/nextcloud/pubspec_overrides.yaml index fc25dc64..b3ed199c 100644 --- a/packages/nextcloud/pubspec_overrides.yaml +++ b/packages/nextcloud/pubspec_overrides.yaml @@ -1,6 +1,8 @@ -# melos_managed_dependency_overrides: dynamite,dynamite_runtime +# melos_managed_dependency_overrides: dynamite,dynamite_runtime,neon_lints dependency_overrides: dynamite: path: ../dynamite/dynamite dynamite_runtime: path: ../dynamite/dynamite_runtime + neon_lints: + path: ../neon_lints diff --git a/packages/sort_box/analysis_options.yaml b/packages/sort_box/analysis_options.yaml index 0ed2fb9f..4db3c296 100644 --- a/packages/sort_box/analysis_options.yaml +++ b/packages/sort_box/analysis_options.yaml @@ -1 +1 @@ -include: package:nit_picking/dart.yaml +include: package:neon_lints/dart.yaml diff --git a/packages/sort_box/pubspec.yaml b/packages/sort_box/pubspec.yaml index 8821da81..0d82372c 100644 --- a/packages/sort_box/pubspec.yaml +++ b/packages/sort_box/pubspec.yaml @@ -5,8 +5,8 @@ environment: sdk: '>=3.0.0 <4.0.0' dev_dependencies: - nit_picking: + neon_lints: git: - url: https://github.com/stack11/dart_nit_picking - ref: 0b2ee0d + url: https://github.com/nextcloud/neon + path: packages/neon_lints test: ^1.24.2 diff --git a/packages/sort_box/pubspec_overrides.yaml b/packages/sort_box/pubspec_overrides.yaml new file mode 100644 index 00000000..4abc9fdc --- /dev/null +++ b/packages/sort_box/pubspec_overrides.yaml @@ -0,0 +1,4 @@ +# melos_managed_dependency_overrides: neon_lints +dependency_overrides: + neon_lints: + path: ../neon_lints