diff --git a/lib/core/link.dart b/lib/core/link.dart index e6afd05f..d5bf50e4 100644 --- a/lib/core/link.dart +++ b/lib/core/link.dart @@ -1,5 +1,7 @@ import 'package:markdown/markdown.dart' as md; +// FIXME: This should be split into 2 classes, that way it would be easier +// to access to members with null safety class Link { String? publicTerm; String? filePath; @@ -13,7 +15,17 @@ class Link { required this.filePath, this.headingID, this.alt, - }); + }) { + if (publicTerm?.isEmpty == true) { + publicTerm = null; + } + if (headingID?.isEmpty == true) { + headingID = null; + } + if (alt?.isEmpty == true) { + alt = null; + } + } Link.wiki(this.wikiTerm); bool get isWikiLink => wikiTerm != null; @@ -68,7 +80,7 @@ class LinkExtractor implements md.NodeVisitor { return; } - var alt = el.attributes['title'] ?? ""; + var alt = el.attributes['title']; var title = _getText(el.children); var url = el.attributes['href']; diff --git a/lib/core/links_loader.dart b/lib/core/links_loader.dart index 516d2442..b4c9e732 100644 --- a/lib/core/links_loader.dart +++ b/lib/core/links_loader.dart @@ -1,5 +1,3 @@ -// @dart=2.9 - import 'dart:io'; import 'dart:isolate'; @@ -12,9 +10,9 @@ import 'package:synchronized/synchronized.dart'; import 'package:gitjournal/core/link.dart'; class LinksLoader { - Isolate _isolate; + Isolate? _isolate; ReceivePort _receivePort = ReceivePort(); - SendPort _sendPort; + SendPort? _sendPort; var _loadingLock = Lock(); @@ -24,7 +22,7 @@ class LinksLoader { return await _loadingLock.synchronized(() async { if (_isolate != null && _sendPort != null) return; if (_isolate != null) { - _isolate.kill(priority: Isolate.immediate); + _isolate!.kill(priority: Isolate.immediate); _isolate = null; } _isolate = await Isolate.spawn(_isolateMain, _receivePort.sendPort); @@ -35,11 +33,12 @@ class LinksLoader { }); } - Future<List<Link>> parseLinks({String body, String filePath}) async { + Future<List<Link>> parseLinks( + {required String body, required String filePath}) async { await _initIsolate(); var rec = ReceivePort(); - _sendPort.send(_LoadingMessage(body, filePath, rec.sendPort)); + _sendPort!.send(_LoadingMessage(body, filePath, rec.sendPort)); var data = await rec.first; assert(data is List<Link>); @@ -90,7 +89,7 @@ List<Link> parseLinks(String body, String filePath) { continue; } - l.filePath = p.join(parentFolderPath, p.normalize(l.filePath)); + l.filePath = p.join(parentFolderPath, p.normalize(l.filePath!)); links.add(l); } diff --git a/test/links_loader_test.dart b/test/links_loader_test.dart index f198b359..21e9c096 100644 --- a/test/links_loader_test.dart +++ b/test/links_loader_test.dart @@ -1,5 +1,3 @@ -// @dart=2.9 - import 'package:test/test.dart'; import 'package:gitjournal/core/links_loader.dart'; @@ -26,27 +24,27 @@ void main() { filePath: "/tmp/foo/file.md", ); - expect(links[0].filePath.isEmpty, true); - expect(links[0].headingID.isEmpty, true); - expect(links[0].alt.isEmpty, true); - expect(links[0].publicTerm.isEmpty, true); + expect(links[0].filePath, isNull); + expect(links[0].headingID, isNull); + expect(links[0].alt, isNull); + expect(links[0].publicTerm, isNull); expect(links[0].wikiTerm, "GitJournal"); expect(links[0].isWikiLink, true); expect(links[1].filePath, "/tmp/foo/gitjournal.md"); expect(links[1].publicTerm, "GitJournal"); - expect(links[1].alt.isEmpty, true); - expect(links[1].wikiTerm.isEmpty, true); + expect(links[1].alt, isNull); + expect(links[1].wikiTerm, isNull); expect(links[2].filePath, "/tmp/foo/gitjournal.md"); expect(links[2].publicTerm, "GitJournal"); - expect(links[2].alt.isEmpty, true); - expect(links[2].wikiTerm.isEmpty, true); + expect(links[2].alt, isNull); + expect(links[2].wikiTerm, isNull); expect(links[3].filePath, "/tmp/foo/gitjournal"); expect(links[3].publicTerm, "GitJournal"); expect(links[3].alt, "alt-text"); - expect(links[3].wikiTerm.isEmpty, true); + expect(links[3].wikiTerm, isNull); /* expect(links[4].filePath, "/tmp/foam.md"); @@ -78,13 +76,13 @@ Foam is licensed under the [MIT license](license). expect(links.length, 5); expect(links[0].filePath, "/tmp/foo.md"); - expect(links[0].alt.isEmpty, true); + expect(links[0].alt, isNull); expect(links[0].headingID, "#contributors-"); - expect(links[0].publicTerm.isEmpty, true); + expect(links[0].publicTerm, isNull); expect(links[1].filePath, "/tmp/license"); - expect(links[1].alt.isEmpty, true); - expect(links[1].headingID.isEmpty, true); + expect(links[1].alt, isNull); + expect(links[1].headingID, isNull); expect(links[1].publicTerm, "MIT license"); expect(links[2].filePath, "/tmp/foo.md"); @@ -96,7 +94,7 @@ Foam is licensed under the [MIT license](license). // FIXME: link-references for wiki Links // expect(links[3].filePath.isEmpty, true); // expect(links[3].isWikiLink, true); - expect(links[3].headingID.isEmpty, true); + expect(links[3].headingID, isNull); expect(links[3].alt, "Wiki Links"); expect(links[4].filePath, "/tmp/foo.md");