Browse Source

Merge pull request #576 from nextcloud/feat/linting

Feat/linting
pull/578/head
Nikolas Rimikis 1 year ago committed by GitHub
parent
commit
88fd6d6290
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      commitlint.yaml
  2. 2
      packages/app/analysis_options.yaml
  3. 16
      packages/app/pubspec.lock
  4. 6
      packages/app/pubspec.yaml
  5. 4
      packages/app/pubspec_overrides.yaml
  6. 2
      packages/dynamite/dynamite/analysis_options.yaml
  7. 12
      packages/dynamite/dynamite/lib/src/openapi_builder.dart
  8. 3
      packages/dynamite/dynamite/lib/src/type_result/base.dart
  9. 2
      packages/dynamite/dynamite/lib/src/type_result/enum.dart
  10. 2
      packages/dynamite/dynamite/lib/src/type_result/list.dart
  11. 2
      packages/dynamite/dynamite/lib/src/type_result/map.dart
  12. 6
      packages/dynamite/dynamite/pubspec.yaml
  13. 4
      packages/dynamite/dynamite/pubspec_overrides.yaml
  14. 2
      packages/dynamite/dynamite_runtime/analysis_options.yaml
  15. 6
      packages/dynamite/dynamite_runtime/pubspec.yaml
  16. 4
      packages/dynamite/dynamite_runtime/pubspec_overrides.yaml
  17. 2
      packages/file_icons/analysis_options.yaml
  18. 6
      packages/file_icons/pubspec.yaml
  19. 4
      packages/file_icons/pubspec_overrides.yaml
  20. 2
      packages/neon/neon/analysis_options.yaml
  21. 6
      packages/neon/neon/pubspec.yaml
  22. 4
      packages/neon/neon/pubspec_overrides.yaml
  23. 2
      packages/neon/neon_files/analysis_options.yaml
  24. 7
      packages/neon/neon_files/lib/widgets/actions.dart
  25. 6
      packages/neon/neon_files/pubspec.yaml
  26. 4
      packages/neon/neon_files/pubspec_overrides.yaml
  27. 2
      packages/neon/neon_news/analysis_options.yaml
  28. 9
      packages/neon/neon_news/lib/blocs/articles.dart
  29. 3
      packages/neon/neon_news/lib/widgets/articles_view.dart
  30. 4
      packages/neon/neon_news/lib/widgets/feeds_view.dart
  31. 2
      packages/neon/neon_news/lib/widgets/folders_view.dart
  32. 6
      packages/neon/neon_news/pubspec.yaml
  33. 4
      packages/neon/neon_news/pubspec_overrides.yaml
  34. 2
      packages/neon/neon_notes/analysis_options.yaml
  35. 6
      packages/neon/neon_notes/pubspec.yaml
  36. 4
      packages/neon/neon_notes/pubspec_overrides.yaml
  37. 2
      packages/neon/neon_notifications/analysis_options.yaml
  38. 6
      packages/neon/neon_notifications/pubspec.yaml
  39. 4
      packages/neon/neon_notifications/pubspec_overrides.yaml
  40. 12
      packages/neon_lints/.gitignore
  41. 3
      packages/neon_lints/CHANGELOG.md
  42. 8
      packages/neon_lints/README.md
  43. 1
      packages/neon_lints/analysis_options.yaml
  44. 67
      packages/neon_lints/bin/neon_lints.dart
  45. 225
      packages/neon_lints/lib/dart.yaml
  46. 9
      packages/neon_lints/lib/flutter.yaml
  47. 10
      packages/neon_lints/pubspec.yaml
  48. 2
      packages/nextcloud/analysis_options.yaml
  49. 2
      packages/nextcloud/lib/src/api/core.openapi.dart
  50. 1
      packages/nextcloud/lib/src/api/files_sharing.openapi.dart
  51. 1
      packages/nextcloud/lib/src/api/settings.openapi.dart
  52. 6
      packages/nextcloud/pubspec.yaml
  53. 4
      packages/nextcloud/pubspec_overrides.yaml
  54. 2
      packages/sort_box/analysis_options.yaml
  55. 6
      packages/sort_box/pubspec.yaml
  56. 4
      packages/sort_box/pubspec_overrides.yaml

1
commitlint.yaml

@ -20,5 +20,6 @@ rules:
- neon_news - neon_news
- neon_notes - neon_notes
- neon_notifications - neon_notifications
- neon_lints
- nextcloud - nextcloud
- sort_box - sort_box

2
packages/app/analysis_options.yaml

@ -1 +1 @@
include: package:nit_picking/flutter.yaml include: package:neon_lints/flutter.yaml

16
packages/app/pubspec.lock

@ -696,6 +696,13 @@ packages:
relative: true relative: true
source: path source: path
version: "1.0.0" version: "1.0.0"
neon_lints:
dependency: "direct dev"
description:
path: "../neon_lints"
relative: true
source: path
version: "1.0.0"
neon_news: neon_news:
dependency: "direct main" dependency: "direct main"
description: description:
@ -732,15 +739,6 @@ packages:
relative: true relative: true
source: path source: path
version: "1.0.0" 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: open_file:
dependency: transitive dependency: transitive
description: description:

6
packages/app/pubspec.yaml

@ -39,10 +39,10 @@ dev_dependencies:
integration_test: integration_test:
sdk: flutter sdk: flutter
material_design_icons_flutter: ^7.0.7296 material_design_icons_flutter: ^7.0.7296
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
flutter: flutter:
uses-material-design: true uses-material-design: true

4
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: dependency_overrides:
dynamite_runtime: dynamite_runtime:
path: ../dynamite/dynamite_runtime path: ../dynamite/dynamite_runtime
@ -8,6 +8,8 @@ dependency_overrides:
path: ../neon/neon path: ../neon/neon
neon_files: neon_files:
path: ../neon/neon_files path: ../neon/neon_files
neon_lints:
path: ../neon_lints
neon_news: neon_news:
path: ../neon/neon_news path: ../neon/neon_news
neon_notes: neon_notes:

2
packages/dynamite/dynamite/analysis_options.yaml

@ -1,4 +1,4 @@
include: package:nit_picking/dart.yaml include: package:neon_lints/dart.yaml
linter: linter:
rules: rules:

12
packages/dynamite/dynamite/lib/src/openapi_builder.dart

@ -477,17 +477,14 @@ class OpenAPIBuilder implements Builder {
code.write( code.write(
"path = path.replaceAll('{${parameter.name}}', Uri.encodeQueryComponent($value));", "path = path.replaceAll('{${parameter.name}}', Uri.encodeQueryComponent($value));",
); );
break;
case 'query': case 'query':
code.write( code.write(
"queryParameters['${parameter.name}'] = $value;", "queryParameters['${parameter.name}'] = $value;",
); );
break;
case 'header': case 'header':
code.write( code.write(
"headers['${parameter.name}'] = $value;", "headers['${parameter.name}'] = $value;",
); );
break;
default: default:
throw Exception('Can not work with parameter in "${parameter.in_}"'); throw Exception('Can not work with parameter in "${parameter.in_}"');
} }
@ -549,7 +546,6 @@ class OpenAPIBuilder implements Builder {
if (dartParameterNullable) { if (dartParameterNullable) {
code.write('}'); code.write('}');
} }
break;
default: default:
throw Exception('Can not parse mime type "$mimeType"'); throw Exception('Can not parse mime type "$mimeType"');
} }
@ -1206,7 +1202,6 @@ TypeResult resolveObject(
'result.${_toDartName(propertyName)} = value!;', 'result.${_toDartName(propertyName)} = value!;',
), ),
], ],
const Code('break;'),
]; ];
} }
@ -1548,19 +1543,16 @@ TypeResult resolveType(
'bool', 'bool',
nullable: nullable, nullable: nullable,
); );
break;
case 'integer': case 'integer':
result = TypeResultBase( result = TypeResultBase(
'int', 'int',
nullable: nullable, nullable: nullable,
); );
break;
case 'number': case 'number':
result = TypeResultBase( result = TypeResultBase(
'num', 'num',
nullable: nullable, nullable: nullable,
); );
break;
case 'string': case 'string':
switch (schema.format) { switch (schema.format) {
case 'binary': case 'binary':
@ -1568,14 +1560,12 @@ TypeResult resolveType(
'Uint8List', 'Uint8List',
nullable: nullable, nullable: nullable,
); );
break;
} }
result = TypeResultBase( result = TypeResultBase(
'String', 'String',
nullable: nullable, nullable: nullable,
); );
break;
case 'array': case 'array':
if (schema.items != null) { if (schema.items != null) {
final subResult = resolveType( final subResult = resolveType(
@ -1597,7 +1587,6 @@ TypeResult resolveType(
nullable: nullable, nullable: nullable,
); );
} }
break;
case 'object': case 'object':
if (schema.properties == null) { if (schema.properties == null) {
if (schema.additionalProperties != null) { if (schema.additionalProperties != null) {
@ -1646,7 +1635,6 @@ TypeResult resolveType(
schema, schema,
nullable: nullable, nullable: nullable,
); );
break;
} }
} }

3
packages/dynamite/dynamite/lib/src/type_result/base.dart

@ -3,7 +3,7 @@ part of 'type_result.dart';
@immutable @immutable
class TypeResultBase extends TypeResult { class TypeResultBase extends TypeResult {
TypeResultBase( TypeResultBase(
super.name, { super.className, {
super.nullable, super.nullable,
}); });
@ -47,7 +47,6 @@ class TypeResultBase extends TypeResult {
switch (name) { switch (name) {
case 'JsonObject': case 'JsonObject':
dartName = 'dynamic'; dartName = 'dynamic';
break;
default: default:
dartName = name; dartName = name;
} }

2
packages/dynamite/dynamite/lib/src/type_result/enum.dart

@ -3,7 +3,7 @@ part of 'type_result.dart';
@immutable @immutable
class TypeResultEnum extends TypeResult { class TypeResultEnum extends TypeResult {
TypeResultEnum( TypeResultEnum(
super.name, super.className,
this.subType, { this.subType, {
super.nullable, super.nullable,
}); });

2
packages/dynamite/dynamite/lib/src/type_result/list.dart

@ -3,7 +3,7 @@ part of 'type_result.dart';
@immutable @immutable
class TypeResultList extends TypeResult { class TypeResultList extends TypeResult {
TypeResultList( TypeResultList(
super.name, super.className,
final TypeResult subType, { final TypeResult subType, {
super.nullable, super.nullable,
}) : super(generics: [subType]); }) : super(generics: [subType]);

2
packages/dynamite/dynamite/lib/src/type_result/map.dart

@ -3,7 +3,7 @@ part of 'type_result.dart';
@immutable @immutable
class TypeResultMap extends TypeResult { class TypeResultMap extends TypeResult {
TypeResultMap( TypeResultMap(
super.name, super.className,
final TypeResult subType, { final TypeResult subType, {
super.nullable, super.nullable,
}) : super(generics: [TypeResultBase('String'), subType]); }) : super(generics: [TypeResultBase('String'), subType]);

6
packages/dynamite/dynamite/pubspec.yaml

@ -20,8 +20,8 @@ dev_dependencies:
built_collection: ^5.1.1 built_collection: ^5.1.1
built_value_generator: ^8.5.0 built_value_generator: ^8.5.0
json_serializable: ^6.6.2 json_serializable: ^6.6.2
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
test: ^1.24.2 test: ^1.24.2

4
packages/dynamite/dynamite/pubspec_overrides.yaml

@ -0,0 +1,4 @@
# melos_managed_dependency_overrides: neon_lints
dependency_overrides:
neon_lints:
path: ../../neon_lints

2
packages/dynamite/dynamite_runtime/analysis_options.yaml

@ -1,4 +1,4 @@
include: package:nit_picking/dart.yaml include: package:neon_lints/dart.yaml
linter: linter:
rules: rules:

6
packages/dynamite/dynamite_runtime/pubspec.yaml

@ -14,8 +14,8 @@ dev_dependencies:
build_runner: ^2.4.2 build_runner: ^2.4.2
built_collection: ^5.1.1 built_collection: ^5.1.1
built_value_generator: ^8.5.0 built_value_generator: ^8.5.0
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
test: ^1.24.2 test: ^1.24.2

4
packages/dynamite/dynamite_runtime/pubspec_overrides.yaml

@ -0,0 +1,4 @@
# melos_managed_dependency_overrides: neon_lints
dependency_overrides:
neon_lints:
path: ../../neon_lints

2
packages/file_icons/analysis_options.yaml

@ -1 +1 @@
include: package:nit_picking/dart.yaml include: package:neon_lints/dart.yaml

6
packages/file_icons/pubspec.yaml

@ -11,10 +11,10 @@ dependencies:
path: ^1.8.3 path: ^1.8.3
dev_dependencies: dev_dependencies:
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
flutter: flutter:
fonts: fonts:

4
packages/file_icons/pubspec_overrides.yaml

@ -0,0 +1,4 @@
# melos_managed_dependency_overrides: neon_lints
dependency_overrides:
neon_lints:
path: ../neon_lints

2
packages/neon/neon/analysis_options.yaml

@ -1,4 +1,4 @@
include: package:nit_picking/flutter.yaml include: package:neon_lints/flutter.yaml
analyzer: analyzer:
exclude: exclude:

6
packages/neon/neon/pubspec.yaml

@ -61,10 +61,10 @@ dev_dependencies:
go_router_builder: ^2.2.1 go_router_builder: ^2.2.1
json_serializable: ^6.6.2 json_serializable: ^6.6.2
mocktail: ^1.0.0 mocktail: ^1.0.0
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
test: ^1.24.3 test: ^1.24.3
flutter: flutter:

4
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: dependency_overrides:
dynamite_runtime: dynamite_runtime:
path: ../../dynamite/dynamite_runtime path: ../../dynamite/dynamite_runtime
neon_lints:
path: ../../neon_lints
nextcloud: nextcloud:
path: ../../nextcloud path: ../../nextcloud
sort_box: sort_box:

2
packages/neon/neon_files/analysis_options.yaml

@ -1,4 +1,4 @@
include: package:nit_picking/flutter.yaml include: package:neon_lints/flutter.yaml
analyzer: analyzer:
exclude: exclude:

7
packages/neon/neon_files/lib/widgets/actions.dart

@ -23,7 +23,6 @@ class FileActions extends StatelessWidget {
} else { } else {
bloc.addFavorite(details.path); bloc.addFavorite(details.path);
} }
break;
case FilesFileAction.details: case FilesFileAction.details:
await Navigator.of(context).push( await Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
@ -33,7 +32,6 @@ class FileActions extends StatelessWidget {
), ),
), ),
); );
break;
case FilesFileAction.rename: case FilesFileAction.rename:
final result = await showRenameDialog( final result = await showRenameDialog(
context: context, context: context,
@ -44,7 +42,6 @@ class FileActions extends StatelessWidget {
if (result != null) { if (result != null) {
bloc.rename(details.path, result); bloc.rename(details.path, result);
} }
break;
case FilesFileAction.move: case FilesFileAction.move:
final b = bloc.getNewFilesBrowserBloc(); final b = bloc.getNewFilesBrowserBloc();
final originalPath = details.path.sublist(0, details.path.length - 1); final originalPath = details.path.sublist(0, details.path.length - 1);
@ -61,7 +58,6 @@ class FileActions extends StatelessWidget {
if (result != null) { if (result != null) {
bloc.move(details.path, result..add(details.name)); bloc.move(details.path, result..add(details.name));
} }
break;
case FilesFileAction.copy: case FilesFileAction.copy:
final b = bloc.getNewFilesBrowserBloc(); final b = bloc.getNewFilesBrowserBloc();
final originalPath = details.path.sublist(0, details.path.length - 1); final originalPath = details.path.sublist(0, details.path.length - 1);
@ -78,7 +74,6 @@ class FileActions extends StatelessWidget {
if (result != null) { if (result != null) {
bloc.copy(details.path, result..add(details.name)); bloc.copy(details.path, result..add(details.name));
} }
break;
case FilesFileAction.sync: case FilesFileAction.sync:
final sizeWarning = browserBloc.options.downloadSizeWarning.value; final sizeWarning = browserBloc.options.downloadSizeWarning.value;
if (sizeWarning != null && details.size != null && details.size! > sizeWarning) { if (sizeWarning != null && details.size != null && details.size! > sizeWarning) {
@ -93,7 +88,6 @@ class FileActions extends StatelessWidget {
} }
} }
bloc.syncFile(details.path); bloc.syncFile(details.path);
break;
case FilesFileAction.delete: case FilesFileAction.delete:
if (await showConfirmationDialog( if (await showConfirmationDialog(
context, context,
@ -103,7 +97,6 @@ class FileActions extends StatelessWidget {
)) { )) {
bloc.delete(details.path); bloc.delete(details.path);
} }
break;
} }
} }

6
packages/neon/neon_files/pubspec.yaml

@ -34,10 +34,10 @@ dependencies:
dev_dependencies: dev_dependencies:
build_runner: ^2.4.4 build_runner: ^2.4.4
go_router_builder: ^2.2.1 go_router_builder: ^2.2.1
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
flutter: flutter:
uses-material-design: true uses-material-design: true

4
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: dependency_overrides:
dynamite_runtime: dynamite_runtime:
path: ../../dynamite/dynamite_runtime path: ../../dynamite/dynamite_runtime
@ -6,6 +6,8 @@ dependency_overrides:
path: ../../file_icons path: ../../file_icons
neon: neon:
path: ../neon path: ../neon
neon_lints:
path: ../../neon_lints
nextcloud: nextcloud:
path: ../../nextcloud path: ../../nextcloud
sort_box: sort_box:

2
packages/neon/neon_news/analysis_options.yaml

@ -1,4 +1,4 @@
include: package:nit_picking/flutter.yaml include: package:neon_lints/flutter.yaml
analyzer: analyzer:
exclude: exclude:

9
packages/neon/neon_news/lib/blocs/articles.dart

@ -31,7 +31,7 @@ abstract class NewsArticlesBlocStates {
class NewsMainArticlesBloc extends NewsArticlesBloc { class NewsMainArticlesBloc extends NewsArticlesBloc {
NewsMainArticlesBloc( NewsMainArticlesBloc(
super.newsBloc, super._newsBloc,
super.options, super.options,
super.requestManager, super.requestManager,
super.account, super.account,
@ -98,7 +98,6 @@ class NewsArticlesBloc extends InteractiveBloc implements NewsArticlesBlocEvents
break; break;
case FilterType.unread: case FilterType.unread:
getRead = false; getRead = false;
break;
default: default:
throw Exception('FilterType ${filterType.value} not allowed'); throw Exception('FilterType ${filterType.value} not allowed');
} }
@ -106,23 +105,17 @@ class NewsArticlesBloc extends InteractiveBloc implements NewsArticlesBlocEvents
switch (listType) { switch (listType) {
case ListType.feed: case ListType.feed:
type = NewsListType.feed; type = NewsListType.feed;
break;
case ListType.folder: case ListType.folder:
type = NewsListType.folder; type = NewsListType.folder;
break;
case null: case null:
switch (filterType.value) { switch (filterType.value) {
case FilterType.starred: case FilterType.starred:
type = NewsListType.starred; type = NewsListType.starred;
break;
case FilterType.all: case FilterType.all:
type = NewsListType.allItems; type = NewsListType.allItems;
break;
case FilterType.unread: case FilterType.unread:
type = NewsListType.unread; type = NewsListType.unread;
break;
} }
break;
} }
await requestManager.wrapNextcloud<List<NewsArticle>, NewsListArticles>( await requestManager.wrapNextcloud<List<NewsArticle>, NewsListArticles>(

3
packages/neon/neon_news/lib/widgets/articles_view.dart

@ -70,13 +70,10 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
switch (a) { switch (a) {
case FilterType.all: case FilterType.all:
label = AppLocalizations.of(context).articlesFilterAll; label = AppLocalizations.of(context).articlesFilterAll;
break;
case FilterType.unread: case FilterType.unread:
label = AppLocalizations.of(context).articlesFilterUnread; label = AppLocalizations.of(context).articlesFilterUnread;
break;
case FilterType.starred: case FilterType.starred:
label = AppLocalizations.of(context).articlesFilterStarred; label = AppLocalizations.of(context).articlesFilterStarred;
break;
default: default:
throw Exception('FilterType $a should not be shown'); throw Exception('FilterType $a should not be shown');
} }

4
packages/neon/neon_news/lib/widgets/feeds_view.dart

@ -111,7 +111,6 @@ class NewsFeedsView extends StatelessWidget {
feed: feed, feed: feed,
), ),
); );
break;
case NewsFeedAction.delete: case NewsFeedAction.delete:
if (await showConfirmationDialog( if (await showConfirmationDialog(
context, context,
@ -119,7 +118,6 @@ class NewsFeedsView extends StatelessWidget {
)) { )) {
bloc.removeFeed(feed.id); bloc.removeFeed(feed.id);
} }
break;
case NewsFeedAction.rename: case NewsFeedAction.rename:
final result = await showRenameDialog( final result = await showRenameDialog(
context: context, context: context,
@ -129,7 +127,6 @@ class NewsFeedsView extends StatelessWidget {
if (result != null) { if (result != null) {
bloc.renameFeed(feed.id, result); bloc.renameFeed(feed.id, result);
} }
break;
case NewsFeedAction.move: case NewsFeedAction.move:
final result = await showDialog<List<int?>>( final result = await showDialog<List<int?>>(
context: context, context: context,
@ -141,7 +138,6 @@ class NewsFeedsView extends StatelessWidget {
if (result != null) { if (result != null) {
bloc.moveFeed(feed.id, result[0]); bloc.moveFeed(feed.id, result[0]);
} }
break;
} }
}, },
), ),

2
packages/neon/neon_news/lib/widgets/folders_view.dart

@ -92,7 +92,6 @@ class NewsFoldersView extends StatelessWidget {
)) { )) {
bloc.deleteFolder(folder.id); bloc.deleteFolder(folder.id);
} }
break;
case NewsFolderAction.rename: case NewsFolderAction.rename:
final result = await showRenameDialog( final result = await showRenameDialog(
context: context, context: context,
@ -102,7 +101,6 @@ class NewsFoldersView extends StatelessWidget {
if (result != null) { if (result != null) {
bloc.renameFolder(folder.id, result); bloc.renameFolder(folder.id, result);
} }
break;
} }
}, },
), ),

6
packages/neon/neon_news/pubspec.yaml

@ -27,10 +27,10 @@ dependencies:
dev_dependencies: dev_dependencies:
build_runner: ^2.4.4 build_runner: ^2.4.4
go_router_builder: ^2.2.1 go_router_builder: ^2.2.1
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
flutter: flutter:
uses-material-design: true uses-material-design: true

4
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: dependency_overrides:
dynamite_runtime: dynamite_runtime:
path: ../../dynamite/dynamite_runtime path: ../../dynamite/dynamite_runtime
neon: neon:
path: ../neon path: ../neon
neon_lints:
path: ../../neon_lints
nextcloud: nextcloud:
path: ../../nextcloud path: ../../nextcloud
sort_box: sort_box:

2
packages/neon/neon_notes/analysis_options.yaml

@ -1,4 +1,4 @@
include: package:nit_picking/flutter.yaml include: package:neon_lints/flutter.yaml
analyzer: analyzer:
exclude: exclude:

6
packages/neon/neon_notes/pubspec.yaml

@ -27,10 +27,10 @@ dependencies:
dev_dependencies: dev_dependencies:
build_runner: ^2.4.4 build_runner: ^2.4.4
go_router_builder: ^2.2.1 go_router_builder: ^2.2.1
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
flutter: flutter:
uses-material-design: true uses-material-design: true

4
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: dependency_overrides:
dynamite_runtime: dynamite_runtime:
path: ../../dynamite/dynamite_runtime path: ../../dynamite/dynamite_runtime
neon: neon:
path: ../neon path: ../neon
neon_lints:
path: ../../neon_lints
nextcloud: nextcloud:
path: ../../nextcloud path: ../../nextcloud
sort_box: sort_box:

2
packages/neon/neon_notifications/analysis_options.yaml

@ -1,4 +1,4 @@
include: package:nit_picking/flutter.yaml include: package:neon_lints/flutter.yaml
analyzer: analyzer:
exclude: exclude:

6
packages/neon/neon_notifications/pubspec.yaml

@ -21,10 +21,10 @@ dependencies:
dev_dependencies: dev_dependencies:
build_runner: ^2.4.4 build_runner: ^2.4.4
go_router_builder: ^2.2.1 go_router_builder: ^2.2.1
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
flutter: flutter:
uses-material-design: true uses-material-design: true

4
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: dependency_overrides:
dynamite_runtime: dynamite_runtime:
path: ../../dynamite/dynamite_runtime path: ../../dynamite/dynamite_runtime
neon: neon:
path: ../neon path: ../neon
neon_lints:
path: ../../neon_lints
nextcloud: nextcloud:
path: ../../nextcloud path: ../../nextcloud
sort_box: sort_box:

12
packages/neon_lints/.gitignore vendored

@ -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/

3
packages/neon_lints/CHANGELOG.md

@ -0,0 +1,3 @@
## 1.0.0
- Initial version.

8
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
```

1
packages/neon_lints/analysis_options.yaml

@ -0,0 +1 @@
lib/dart.yaml

67
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());
}

225
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

9
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'

10
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

2
packages/nextcloud/analysis_options.yaml

@ -1 +1 @@
include: package:nit_picking/dart.yaml include: package:neon_lints/dart.yaml

2
packages/nextcloud/lib/src/api/core.openapi.dart

@ -2308,7 +2308,6 @@ class _$CoreAvatarAvatarGetAvatarDarkHeadersSerializer
switch (key) { switch (key) {
case 'x-nc-iscustomavatar': case 'x-nc-iscustomavatar':
result.xNcIscustomavatar = int.parse(value); result.xNcIscustomavatar = int.parse(value);
break;
} }
} }
@ -2371,7 +2370,6 @@ class _$CoreAvatarAvatarGetAvatarHeadersSerializer implements StructuredSerializ
switch (key) { switch (key) {
case 'x-nc-iscustomavatar': case 'x-nc-iscustomavatar':
result.xNcIscustomavatar = int.parse(value); result.xNcIscustomavatar = int.parse(value);
break;
} }
} }

1
packages/nextcloud/lib/src/api/files_sharing.openapi.dart

@ -2410,7 +2410,6 @@ class _$FilesSharingShareesapiShareesapiSearchHeadersSerializer
switch (key) { switch (key) {
case 'link': case 'link':
result.link = value; result.link = value;
break;
} }
} }

1
packages/nextcloud/lib/src/api/settings.openapi.dart

@ -182,7 +182,6 @@ class _$SettingsLogSettingsLogSettingsDownloadHeadersSerializer
switch (key) { switch (key) {
case 'content-disposition': case 'content-disposition':
result.contentDisposition = value; result.contentDisposition = value;
break;
} }
} }

6
packages/nextcloud/pubspec.yaml

@ -30,10 +30,10 @@ dev_dependencies:
url: https://github.com/nextcloud/neon url: https://github.com/nextcloud/neon
path: packages/dynamite/dynamite path: packages/dynamite/dynamite
json_serializable: ^6.6.2 json_serializable: ^6.6.2
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
process_run: ^0.13.0 process_run: ^0.13.0
test: ^1.24.2 test: ^1.24.2
xml_serializable: ^2.2.2 xml_serializable: ^2.2.2

4
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: dependency_overrides:
dynamite: dynamite:
path: ../dynamite/dynamite path: ../dynamite/dynamite
dynamite_runtime: dynamite_runtime:
path: ../dynamite/dynamite_runtime path: ../dynamite/dynamite_runtime
neon_lints:
path: ../neon_lints

2
packages/sort_box/analysis_options.yaml

@ -1 +1 @@
include: package:nit_picking/dart.yaml include: package:neon_lints/dart.yaml

6
packages/sort_box/pubspec.yaml

@ -5,8 +5,8 @@ environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=3.0.0 <4.0.0'
dev_dependencies: dev_dependencies:
nit_picking: neon_lints:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/nextcloud/neon
ref: 0b2ee0d path: packages/neon_lints
test: ^1.24.2 test: ^1.24.2

4
packages/sort_box/pubspec_overrides.yaml

@ -0,0 +1,4 @@
# melos_managed_dependency_overrides: neon_lints
dependency_overrides:
neon_lints:
path: ../neon_lints
Loading…
Cancel
Save