diff --git a/analysis_options.yaml b/analysis_options.yaml index f377a865..d7deb7ac 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,7 +1,5 @@ -include: package:pedantic/analysis_options.yaml +include: package:flutter_lints/flutter.yaml analyzer: - strong-mode: - implicit-casts: false errors: dead_code: error unused_element: error @@ -15,7 +13,6 @@ linter: # - always_put_required_named_parameters_first - always_put_control_body_on_new_line - always_put_required_named_parameters_first - - always_require_non_null_named_parameters - annotate_overrides - avoid_annotating_with_dynamic # - avoid_as @@ -40,11 +37,7 @@ linter: - avoid_relative_lib_imports - avoid_renaming_method_parameters - avoid_return_types_on_setters - - avoid_returning_null - - avoid_returning_null_for_future - - avoid_returning_null_for_void - avoid_returning_this - # - avoid_setters_without_getters - avoid_shadowing_type_parameters - avoid_single_cascade_in_expression_statements - avoid_slow_async_io @@ -76,19 +69,16 @@ linter: - hash_and_equals - implementation_imports - invariant_booleans - - iterable_contains_unrelated_type + - collection_methods_unrelated_type - join_return_with_assignment - leading_newlines_in_multiline_strings - library_names - library_prefixes - - lines_longer_than_80_chars - - list_remove_unrelated_type # - literal_only_boolean_expressions - missing_whitespace_between_adjacent_strings - no_adjacent_strings_in_list - no_duplicate_case_values - no_logic_in_create_state - - no_runtimeType_toString - non_constant_identifier_names - null_closures - omit_local_variable_types diff --git a/bin/delta_markdown.dart b/bin/delta_markdown.dart index c729dc45..b27b8890 100644 --- a/bin/delta_markdown.dart +++ b/bin/delta_markdown.dart @@ -54,8 +54,6 @@ Future main(List args) async { } } - - void printUsage(ArgParser parser) { print(''' Usage: delta_markdown.dart [options] [file] diff --git a/lib/src/block_parser.dart b/lib/src/block_parser.dart index ee924d33..d222c7b6 100644 --- a/lib/src/block_parser.dart +++ b/lib/src/block_parser.dart @@ -1060,8 +1060,7 @@ class ParagraphSyntax extends BlockSyntax { // Reference id in brackets, and URL. r'''\[((?:\\\]|[^\]])+)\]:\s*(?:<(\S+)>|(\S+))\s*''' // Title in double or single quotes, or parens. - r'''("[^"]+"|'[^']+'|\([^)]+\)|)\s*$''', - multiLine: true); + r'''("[^"]+"|'[^']+'|\([^)]+\)|)\s*$''', multiLine: true); final match = pattern.firstMatch(contents); if (match == null) { // Not a reference link definition. diff --git a/lib/src/delta_markdown_decoder.dart b/lib/src/delta_markdown_decoder.dart index bbaed8d9..2333c93c 100644 --- a/lib/src/delta_markdown_decoder.dart +++ b/lib/src/delta_markdown_decoder.dart @@ -239,7 +239,7 @@ class _DeltaVisitor implements ast.NodeVisitor { final href = el.attributes['src']; return ImageAttribute(href); case 'hr': - return DividerAttribute(); + return const DividerAttribute(); } return null; @@ -247,9 +247,10 @@ class _DeltaVisitor implements ast.NodeVisitor { } class ImageAttribute extends Attribute { - ImageAttribute(String? val) : super('image', AttributeScope.EMBEDS, val); + const ImageAttribute(String? val) + : super('image', AttributeScope.embeds, val); } class DividerAttribute extends Attribute { - DividerAttribute() : super('divider', AttributeScope.EMBEDS, 'hr'); + const DividerAttribute() : super('divider', AttributeScope.embeds, 'hr'); } diff --git a/lib/src/delta_markdown_encoder.dart b/lib/src/delta_markdown_encoder.dart index e771f54b..2134a92e 100644 --- a/lib/src/delta_markdown_encoder.dart +++ b/lib/src/delta_markdown_encoder.dart @@ -20,7 +20,7 @@ class DeltaMarkdownEncoder extends Converter { String convert(String input) { markdownBuffer = StringBuffer(); lineBuffer = StringBuffer(); - currentInlineStyle = Style(); + currentInlineStyle = const Style(); currentBlockLines = []; final inputJson = jsonDecode(input) as List?; @@ -66,7 +66,7 @@ class DeltaMarkdownEncoder extends Converter { for (final value in currentInlineStyle.attributes.values.toList().reversed) { // TODO(tillf): Is block correct? - if (value.scope == AttributeScope.BLOCK) { + if (value.scope == AttributeScope.block) { continue; } if (style.containsKey(value.key)) { @@ -89,7 +89,7 @@ class DeltaMarkdownEncoder extends Converter { // Now open any new styles. for (final attribute in style.attributes.values) { // TODO(tillf): Is block correct? - if (attribute.scope == AttributeScope.BLOCK) { + if (attribute.scope == AttributeScope.block) { continue; } if (currentInlineStyle.containsKey(attribute.key)) { @@ -124,7 +124,7 @@ class DeltaMarkdownEncoder extends Converter { final lineBlock = Style.fromJson(attributes) .attributes .values - .singleWhereOrNull((a) => a.scope == AttributeScope.BLOCK); + .singleWhereOrNull((a) => a.scope == AttributeScope.block); if (lineBlock == currentBlockStyle) { currentBlockLines.add(lineBuffer.toString()); diff --git a/lib/src/inline_parser.dart b/lib/src/inline_parser.dart index 0f15a99e..ecbc9a16 100644 --- a/lib/src/inline_parser.dart +++ b/lib/src/inline_parser.dart @@ -194,9 +194,7 @@ class LineBreakSyntax extends InlineSyntax { /// Matches stuff that should just be passed through as straight text. class TextSyntax extends InlineSyntax { - TextSyntax(String pattern, {String? sub}) - : substitute = sub, - super(pattern); + TextSyntax(super.pattern, {String? sub}) : substitute = sub; final String? substitute; @@ -399,8 +397,8 @@ class AutolinkExtensionSyntax extends InlineSyntax { } } -class _DelimiterRun { - _DelimiterRun._( +class DelimiterRun { + DelimiterRun._( {this.char, this.length, this.isLeftFlanking, @@ -420,8 +418,7 @@ class _DelimiterRun { final bool? isFollowedByPunctuation; // ignore: prefer_constructors_over_static_methods - static _DelimiterRun? tryParse( - InlineParser parser, int runStart, int runEnd) { + static DelimiterRun? tryParse(InlineParser parser, int runStart, int runEnd) { bool leftFlanking, rightFlanking, precededByPunctuation, @@ -466,7 +463,7 @@ class _DelimiterRun { return null; } - return _DelimiterRun._( + return DelimiterRun._( char: parser.charAt(runStart), length: runEnd - runStart + 1, isLeftFlanking: leftFlanking, @@ -494,9 +491,8 @@ class _DelimiterRun { /// Matches syntax that has a pair of tags and becomes an element, like `*` for /// ``. Allows nested tags. class TagSyntax extends InlineSyntax { - TagSyntax(String pattern, {String? end, this.requiresDelimiterRun = false}) - : endPattern = RegExp((end != null) ? end : pattern, multiLine: true), - super(pattern); + TagSyntax(super.pattern, {String? end, this.requiresDelimiterRun = false}) + : endPattern = RegExp((end != null) ? end : pattern, multiLine: true); final RegExp endPattern; @@ -516,7 +512,7 @@ class TagSyntax extends InlineSyntax { return true; } - final delimiterRun = _DelimiterRun.tryParse(parser, matchStart, matchEnd); + final delimiterRun = DelimiterRun.tryParse(parser, matchStart, matchEnd); if (delimiterRun != null && delimiterRun.canOpen) { parser.openTag(TagState(parser.pos, matchEnd + 1, this, delimiterRun)); return true; @@ -531,7 +527,7 @@ class TagSyntax extends InlineSyntax { final matchStart = parser.pos; final matchEnd = parser.pos + runLength - 1; final openingRunLength = state.endPos - state.startPos; - final delimiterRun = _DelimiterRun.tryParse(parser, matchStart, matchEnd); + final delimiterRun = DelimiterRun.tryParse(parser, matchStart, matchEnd); if (openingRunLength == 1 && runLength == 1) { parser.addNode(Element('em', state.children)); @@ -579,7 +575,7 @@ class StrikethroughSyntax extends TagSyntax { final runLength = match.group(0)!.length; final matchStart = parser.pos; final matchEnd = parser.pos + runLength - 1; - final delimiterRun = _DelimiterRun.tryParse(parser, matchStart, matchEnd)!; + final delimiterRun = DelimiterRun.tryParse(parser, matchStart, matchEnd)!; if (!delimiterRun.isRightFlanking!) { return false; } @@ -1048,8 +1044,7 @@ class LinkSyntax extends TagSyntax { /// Matches images like `![alternate text](url "optional title")` and /// `![alternate text][label]`. class ImageSyntax extends LinkSyntax { - ImageSyntax({Resolver? linkResolver}) - : super(linkResolver: linkResolver, pattern: r'!\['); + ImageSyntax({super.linkResolver}) : super(pattern: r'!\['); @override Node _createNode(TagState state, String destination, String? title) { @@ -1170,7 +1165,7 @@ class TagState { /// The children of this node. Will be `null` for text nodes. final List children; - final _DelimiterRun? openingDelimiterRun; + final DelimiterRun? openingDelimiterRun; /// Attempts to close this tag by matching the current text against its end /// pattern. @@ -1193,7 +1188,7 @@ class TagState { final closingMatchStart = parser.pos; final closingMatchEnd = parser.pos + runLength - 1; final closingDelimiterRun = - _DelimiterRun.tryParse(parser, closingMatchStart, closingMatchEnd); + DelimiterRun.tryParse(parser, closingMatchStart, closingMatchEnd); if (closingDelimiterRun != null && closingDelimiterRun.canClose) { // Emphasis rules #9 and #10: final oneRunOpensAndCloses = diff --git a/pubspec.yaml b/pubspec.yaml index c7ccc86d..ab37e2ba 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,17 +6,17 @@ description: A library for converting between Markdown and Delta of the homepage: https://github.com/friebetill/notus_markdown environment: - sdk: ">=2.12.0 <3.0.0" + sdk: '>=3.1.5 <4.0.0' dependencies: - args: ^2.0.0 - charcode: ^1.2.0 + args: ^2.4.2 + charcode: ^1.3.1 collection: ^1.15.0 - flutter_quill: ^7.0.0 + flutter_quill: ^8.5.1 dev_dependencies: - build_runner: ^2.0.0 + build_runner: ^2.4.6 + flutter_lints: ^3.0.1 flutter_test: sdk: flutter - pedantic: ^1.11.0 - test: ^1.16.5 + test: ^1.24.3 diff --git a/test/delta_to_markdown_test.dart b/test/delta_to_markdown_test.dart index 09dcd5ff..f5502dfe 100644 --- a/test/delta_to_markdown_test.dart +++ b/test/delta_to_markdown_test.dart @@ -92,7 +92,8 @@ void main() { }); test('Works with horizontal line', () { - const delta = r'[{"insert":"Foo\n"},{"insert":{"divider":"hr"}},{"insert":"Bar\n"}]'; + const delta = + r'[{"insert":"Foo\n"},{"insert":{"divider":"hr"}},{"insert":"Bar\n"}]'; const expected = 'Foo\n\n---\n\nBar\n'; final result = deltaToMarkdown(delta); diff --git a/test/markdown_to_delta_test.dart b/test/markdown_to_delta_test.dart index 155df905..71ade547 100644 --- a/test/markdown_to_delta_test.dart +++ b/test/markdown_to_delta_test.dart @@ -165,7 +165,8 @@ void main() { test('Works with horizontal line', () { const markdown = 'Foo\n\n---\n\nBar\n'; - const expected = r'[{"insert":"Foo\n"},{"insert":{"divider":"hr"}},{"insert":"Bar\n"}]'; + const expected = + r'[{"insert":"Foo\n"},{"insert":{"divider":"hr"}},{"insert":"Bar\n"}]'; final result = markdownToDelta(markdown);