diff --git a/packages/combinator/.gitignore b/packages/combinator/.gitignore index f277009e..24d68312 100644 --- a/packages/combinator/.gitignore +++ b/packages/combinator/.gitignore @@ -1,44 +1,55 @@ -# Created by .ignore support plugin (hsz.mobi) -### Dart template # See https://www.dartlang.org/tools/private-files.html # Files and directories created by pub +.dart_tool .packages .pub/ build/ + # If you're building an application, you may want to check-in your pubspec.lock pubspec.lock # Directory created by dartdoc # If you don't generate documentation locally you can remove this line. doc/api/ + +### Dart template +# See https://www.dartlang.org/tools/private-files.html + +# Files and directories created by pub + +# SDK 1.20 and later (no longer creates packages directories) + +# Older SDK versions +# (Include if the minimum SDK version specified in pubsepc.yaml is earlier than 1.20) +.project +.buildlog +**/packages/ + + +# Files created by dart2js +# (Most Dart developers will use pub build to compile Dart, use/modify these +# rules if you intend to use dart2js directly +# Convention is to use extension '.dart.js' for Dart compiled to Javascript to +# differentiate from explicit Javascript files) +*.dart.js +*.part.js +*.js.deps +*.js.map +*.info.json + +# Directory created by dartdoc + +# Don't commit pubspec lock file +# (Library packages only! Remove pattern if developing an application package) ### JetBrains template # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff: -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/dictionaries -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.xml -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# CMake -cmake-build-debug/ - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml +## VsCode +.vscode/ ## File-based project format: *.iws @@ -46,21 +57,15 @@ cmake-build-debug/ ## Plugin-specific files: # IntelliJ -out/ - -# mpeltonen/sbt-idea plugin +.idea/ +/out/ .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml -# Cursive Clojure plugin -.idea/replstate.xml - # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties - -.dart_tool \ No newline at end of file diff --git a/packages/combinator/AUTHORS.md b/packages/combinator/AUTHORS.md index 2a973de6..ac95ab58 100644 --- a/packages/combinator/AUTHORS.md +++ b/packages/combinator/AUTHORS.md @@ -1,2 +1,12 @@ -Tobe O -Thomas Hii \ No newline at end of file +Primary Authors +=============== + +* __[Thomas Hii](dukefirehawk.apps@gmail.com)__ + + Thomas is the current maintainer of the code base. He has refactored and migrated the + code base to support NNBD. + +* __[Tobe O](thosakwe@gmail.com)__ + + Tobe has written much of the original code prior to NNBD migration. He has moved on and + is no longer involved with the project. diff --git a/packages/combinator/LICENSE b/packages/combinator/LICENSE index 3de28325..b593ac86 100644 --- a/packages/combinator/LICENSE +++ b/packages/combinator/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 Tobe O +Copyright (c) 2021 dukefirehawk.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/combinator/README.md b/packages/combinator/README.md index 63cd48e6..cc4fc58c 100644 --- a/packages/combinator/README.md +++ b/packages/combinator/README.md @@ -1,6 +1,8 @@ -# combinator -[![version](https://img.shields.io/pub/v/combinator.svg)](https://pub.dartlang.org/packages/combinator) -[![build status](https://travis-ci.org/thosakwe/combinator.svg)](https://travis-ci.org/thosakwe/combinator) +# angel3_combinator +[![version](https://img.shields.io/badge/pub-v2.12.4-brightgreen)](https://pub.dartlang.org/packages/angel3_combinator) +[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety) + +[![License](https://img.shields.io/github/license/dukefirehawk/angel)](https://github.com/dukefirehawk/angel/tree/angel3/combinator) Packrat parser combinators that support static typing, generics, file spans, memoization, and more. @@ -16,7 +18,7 @@ The examples contain examples of using: void main() { // Parse a Pattern (usually String or RegExp). var foo = match('foo'); - var number = match(new RegExp(r'[0-9]+'), errorMessage: 'Expected a number.'); + var number = match(RegExp(r'[0-9]+'), errorMessage: 'Expected a number.'); // Set a value. var numWithValue = number.map((r) => int.parse(r.span.text)); @@ -64,7 +66,7 @@ void main() { ## Error Messages Parsers without descriptive error messages can lead to frustrating dead-ends -for end-users. Fortunately, `combinator` is built with error handling in mind. +for end-users. Fortunately, `angel3_combinator` is built with error handling in mind. ```dart void main(Parser parser) { @@ -98,7 +100,7 @@ void main(Parser parser) { ``` ## For Programming Languages -`combinator` was conceived to make writing parsers for complex grammars easier, +`angel3_combinator` was conceived to make writing parsers for complex grammars easier, namely programming languages. Thus, there are functions built-in to make common constructs easier: @@ -115,6 +117,6 @@ void main(Parser parser) { ``` ## Differences between this and Petitparser -* `combinator` makes extensive use of Dart's dynamic typing -* `combinator` supports detailed error messages (with configurable severity) -* `combinator` keeps track of locations (ex. `line 1: 3`) \ No newline at end of file +* `angel3_combinator` makes extensive use of Dart's dynamic typing +* `angel3_combinator` supports detailed error messages (with configurable severity) +* `angel3_combinator` keeps track of locations (ex. `line 1: 3`) \ No newline at end of file diff --git a/packages/combinator/example/basic_auth.dart b/packages/combinator/example/basic_auth.dart index ec3784a8..15128da6 100644 --- a/packages/combinator/example/basic_auth.dart +++ b/packages/combinator/example/basic_auth.dart @@ -2,14 +2,14 @@ import 'dart:convert'; import 'dart:io'; -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; /// Parse a part of a decoded Basic auth string. /// /// Namely, the `username` or `password` in `{username}:{password}`. final Parser string = - match(new RegExp(r'[^:$]+'), errorMessage: 'Expected a string.') + match(RegExp(r'[^:$]+'), errorMessage: 'Expected a string.') .value((r) => r.span!.text); /// Transforms `{username}:{password}` to `{"username": username, "password": password}`. @@ -25,11 +25,11 @@ final Parser> credentials = chain([ /// This is used here to BASE64URL-decode a string, and then /// parse the decoded string. final Parser credentialString = match?>( - new RegExp(r'([^\n$]+)'), + RegExp(r'([^\n$]+)'), errorMessage: 'Expected a credential string.') .value((r) { var decoded = utf8.decode(base64Url.decode(r.span!.text)); - var scanner = new SpanScanner(decoded); + var scanner = SpanScanner(decoded); return credentials.parse(scanner).value; }); @@ -41,7 +41,7 @@ void main() { while (true) { stdout.write('Enter a basic auth value: '); var line = stdin.readLineSync()!; - var scanner = new SpanScanner(line, sourceUrl: 'stdin'); + var scanner = SpanScanner(line, sourceUrl: 'stdin'); var result = basicAuth.parse(scanner); if (!result.successful) { diff --git a/packages/combinator/example/calculator.dart b/packages/combinator/example/calculator.dart index 7f8607b7..e0b46083 100644 --- a/packages/combinator/example/calculator.dart +++ b/packages/combinator/example/calculator.dart @@ -1,19 +1,19 @@ import 'dart:math'; import 'dart:io'; -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; /// Note: This grammar does not handle precedence, for the sake of simplicity. Parser calculatorGrammar() { var expr = reference(); - var number = match(new RegExp(r'-?[0-9]+(\.[0-9]+)?')) + var number = match(RegExp(r'-?[0-9]+(\.[0-9]+)?')) .value((r) => num.parse(r.span!.text)); - var hex = match(new RegExp(r'0x([A-Fa-f0-9]+)')) + var hex = match(RegExp(r'0x([A-Fa-f0-9]+)')) .map((r) => int.parse(r.scanner.lastMatch![1]!, radix: 16)); - var binary = match(new RegExp(r'([0-1]+)b')) + var binary = match(RegExp(r'([0-1]+)b')) .map((r) => int.parse(r.scanner.lastMatch![1]!, radix: 2)); var alternatives = >[]; @@ -56,7 +56,7 @@ void main() { while (true) { stdout.write('Enter an expression: '); var line = stdin.readLineSync()!; - var scanner = new SpanScanner(line, sourceUrl: 'stdin'); + var scanner = SpanScanner(line, sourceUrl: 'stdin'); var result = calculator.parse(scanner); if (!result.successful) { diff --git a/packages/combinator/example/delimiter.dart b/packages/combinator/example/delimiter.dart index ef58c106..71008e47 100644 --- a/packages/combinator/example/delimiter.dart +++ b/packages/combinator/example/delimiter.dart @@ -1,5 +1,5 @@ import 'dart:io'; -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; final Parser id = @@ -14,7 +14,7 @@ main() { while (true) { stdout.write('Enter a string (ex "a,b,c"): '); var line = stdin.readLineSync()!; - var scanner = new SpanScanner(line, sourceUrl: 'stdin'); + var scanner = SpanScanner(line, sourceUrl: 'stdin'); var result = id.separatedBy(match(',').space()).parse(scanner); if (!result.successful) { diff --git a/packages/combinator/example/json.dart b/packages/combinator/example/json.dart index 47a4d5b8..36eff7bf 100644 --- a/packages/combinator/example/json.dart +++ b/packages/combinator/example/json.dart @@ -1,12 +1,12 @@ import 'dart:io'; -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; Parser jsonGrammar() { var expr = reference(); // Parse a number - var number = match(new RegExp(r'-?[0-9]+(\.[0-9]+)?'), + var number = match(RegExp(r'-?[0-9]+(\.[0-9]+)?'), errorMessage: 'Expected a number.') .value( (r) => num.parse(r.span!.text), @@ -14,7 +14,7 @@ Parser jsonGrammar() { // Parse a string (no escapes supported, because lazy). var string = - match(new RegExp(r'"[^"]*"'), errorMessage: 'Expected a string.').value( + match(RegExp(r'"[^"]*"'), errorMessage: 'Expected a string.').value( (r) => r.span!.text.substring(1, r.span!.text.length - 1), ); @@ -56,7 +56,7 @@ main() { while (true) { stdout.write('Enter some JSON: '); var line = stdin.readLineSync()!; - var scanner = new SpanScanner(line, sourceUrl: 'stdin'); + var scanner = SpanScanner(line, sourceUrl: 'stdin'); var result = JSON.parse(scanner); if (!result.successful) { diff --git a/packages/combinator/example/main.dart b/packages/combinator/example/main.dart index e08a7b1d..2ed8d8b3 100644 --- a/packages/combinator/example/main.dart +++ b/packages/combinator/example/main.dart @@ -1,11 +1,11 @@ import 'dart:io'; -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; final Parser minus = match('-'); final Parser digit = - match(new RegExp(r'[0-9]'), errorMessage: 'Expected a number'); + match(RegExp(r'[0-9]'), errorMessage: 'Expected a number'); final Parser digits = digit.plus(); @@ -23,7 +23,7 @@ main() { while (true) { stdout.write('Enter a number: '); var line = stdin.readLineSync()!; - var scanner = new SpanScanner(line, sourceUrl: 'stdin'); + var scanner = SpanScanner(line, sourceUrl: 'stdin'); var result = number.parse(scanner); if (!result.successful) { diff --git a/packages/combinator/example/query_string.dart b/packages/combinator/example/query_string.dart index c0121965..4e7c3a6a 100644 --- a/packages/combinator/example/query_string.dart +++ b/packages/combinator/example/query_string.dart @@ -1,7 +1,7 @@ // For some reason, this cannot be run in checked mode??? import 'dart:io'; -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; final Parser key = @@ -30,7 +30,7 @@ main() { while (true) { stdout.write('Enter a query string: '); var line = stdin.readLineSync()!; - var scanner = new SpanScanner(line, sourceUrl: 'stdin'); + var scanner = SpanScanner(line, sourceUrl: 'stdin'); var result = pairs.parse(scanner); if (!result.successful) { diff --git a/packages/combinator/example/sexp.dart b/packages/combinator/example/sexp.dart index 7e6c9def..541d3c35 100644 --- a/packages/combinator/example/sexp.dart +++ b/packages/combinator/example/sexp.dart @@ -1,7 +1,7 @@ import 'dart:collection'; import 'dart:io'; import 'dart:math'; -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; import 'package:tuple/tuple.dart'; @@ -10,7 +10,7 @@ void main() { var symbols = {}; void registerFunction(String name, int nArgs, Function(List) f) { - symbols[name] = new Tuple2(nArgs, f); + symbols[name] = Tuple2(nArgs, f); } registerFunction('**', 2, (args) => pow(args[0], args[1])); @@ -25,12 +25,12 @@ void main() { return args[0]; }); - var number = match(new RegExp(r'[0-9]+(\.[0-9]+)?'), - errorMessage: 'Expected a number.') - .map((r) => num.parse(r.span!.text)); + var number = + match(RegExp(r'[0-9]+(\.[0-9]+)?'), errorMessage: 'Expected a number.') + .map((r) => num.parse(r.span!.text)); var id = match( - new RegExp( + RegExp( r'[A-Za-z_!\\$",\\+-\\./:;\\?<>%&\\*@\[\]\\{\}\\|`\\^~][A-Za-z0-9_!\\$",\\+-\\./:;\\?<>%&\*@\[\]\\{\}\\|`\\^~]*'), errorMessage: 'Expected an ID') .map((r) => symbols[r.span!.text] ??= @@ -41,7 +41,7 @@ void main() { var list = expr.space().times(2, exact: false).map((r) { try { var out = []; - var q = new Queue.from(r.value!.reversed); + var q = Queue.from(r.value!.reversed); while (q.isNotEmpty) { var current = q.removeFirst(); @@ -70,7 +70,7 @@ void main() { while (true) { stdout.write('> '); var line = stdin.readLineSync()!; - var result = expr.parse(new SpanScanner(line)); + var result = expr.parse(SpanScanner(line)); if (result.errors.isNotEmpty) { for (var error in result.errors) { diff --git a/packages/combinator/example/tuple.dart b/packages/combinator/example/tuple.dart index a05c7fe3..188ced83 100644 --- a/packages/combinator/example/tuple.dart +++ b/packages/combinator/example/tuple.dart @@ -1,4 +1,4 @@ -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; void main() { diff --git a/packages/combinator/lib/combinator.dart b/packages/combinator/lib/angel3_combinator.dart similarity index 100% rename from packages/combinator/lib/combinator.dart rename to packages/combinator/lib/angel3_combinator.dart diff --git a/packages/combinator/lib/src/combinator/combinator.dart b/packages/combinator/lib/src/combinator/combinator.dart index 821b8991..3b2fcc7a 100644 --- a/packages/combinator/lib/src/combinator/combinator.dart +++ b/packages/combinator/lib/src/combinator/combinator.dart @@ -2,7 +2,7 @@ library lex.src.combinator; import 'dart:collection'; -import 'package:code_buffer/code_buffer.dart'; +import 'package:angel3_code_buffer/angel3_code_buffer.dart'; import 'package:matcher/matcher.dart'; import 'package:source_span/source_span.dart'; import 'package:string_scanner/string_scanner.dart'; diff --git a/packages/combinator/pubspec.yaml b/packages/combinator/pubspec.yaml index 2174271e..492ed31f 100644 --- a/packages/combinator/pubspec.yaml +++ b/packages/combinator/pubspec.yaml @@ -1,16 +1,12 @@ -name: combinator -version: 2.0.0-beta.1 +name: angel3_combinator +version: 2.0.0 description: Packrat parser combinators that support static typing, generics, file spans, memoization, and more. -homepage: https://github.com/dukefirehawk/angel/tree/sdk-2.12.x_nnbd/packages/combinator +homepage: https://github.com/dukefirehawk/angel/tree/angel3/packages/combinator publish_to: none environment: sdk: '>=2.12.0 <3.0.0' dependencies: - code_buffer: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/code_buffer + angel3_code_buffer: ^2.0.0 matcher: ^0.12.0 source_span: ^1.8.1 string_scanner: ^1.1.0 diff --git a/packages/combinator/test/all.dart b/packages/combinator/test/all.dart index bc3144cb..9022d5fa 100644 --- a/packages/combinator/test/all.dart +++ b/packages/combinator/test/all.dart @@ -4,7 +4,7 @@ import 'match_test.dart' as match; import 'misc_test.dart' as misc; import 'value_test.dart' as value; -main() { +void main() { group('list', list.main); group('match', match.main); group('value', value.main); diff --git a/packages/combinator/test/list_test.dart b/packages/combinator/test/list_test.dart index a9e53ab1..c137eae0 100644 --- a/packages/combinator/test/list_test.dart +++ b/packages/combinator/test/list_test.dart @@ -1,4 +1,4 @@ -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:test/test.dart'; import 'common.dart'; diff --git a/packages/combinator/test/match_test.dart b/packages/combinator/test/match_test.dart index 60504d93..b2a4bcc4 100644 --- a/packages/combinator/test/match_test.dart +++ b/packages/combinator/test/match_test.dart @@ -1,8 +1,8 @@ -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:test/test.dart'; import 'common.dart'; -main() { +void main() { test('match string', () { expect(match('hello').parse(scan('hello world')).successful, isTrue); }); diff --git a/packages/combinator/test/misc_test.dart b/packages/combinator/test/misc_test.dart index 4bce26fc..aecdc1fb 100644 --- a/packages/combinator/test/misc_test.dart +++ b/packages/combinator/test/misc_test.dart @@ -1,9 +1,9 @@ -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:matcher/matcher.dart'; import 'package:test/test.dart'; import 'common.dart'; -main() { +void main() { test('advance', () { var scanner = scan('hello world'); diff --git a/packages/combinator/test/recursion_test.dart b/packages/combinator/test/recursion_test.dart index 4f1cdf17..748883d8 100644 --- a/packages/combinator/test/recursion_test.dart +++ b/packages/combinator/test/recursion_test.dart @@ -1,4 +1,4 @@ -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:string_scanner/string_scanner.dart'; import 'package:test/test.dart'; diff --git a/packages/combinator/test/value_test.dart b/packages/combinator/test/value_test.dart index c987d10f..7f2cb102 100644 --- a/packages/combinator/test/value_test.dart +++ b/packages/combinator/test/value_test.dart @@ -1,8 +1,8 @@ -import 'package:combinator/combinator.dart'; +import 'package:angel3_combinator/angel3_combinator.dart'; import 'package:test/test.dart'; import 'common.dart'; -main() { +void main() { var parser = match('hello').value((r) => 'world'); test('sets value', () { diff --git a/packages/http_exception/README.md b/packages/http_exception/README.md index a41b8774..2caa8299 100644 --- a/packages/http_exception/README.md +++ b/packages/http_exception/README.md @@ -1,4 +1,4 @@ -# http_exception +# angel3_http_exception [![version](https://img.shields.io/badge/pub-v2.12.4-brightgreen)](https://pub.dartlang.org/packages/angel3_http_exception) [![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)