From f8ae3aac8d6c5afed12f344d7321fcbad0d147d8 Mon Sep 17 00:00:00 2001 From: mappu Date: Wed, 10 Jun 2020 19:10:01 +1200 Subject: [PATCH] doc/README: fix markdown syntax for publication --- README.md | 81 +++++++++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 628069d..b500017 100644 --- a/README.md +++ b/README.md @@ -8,52 +8,52 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv ### Phase 1 -[X] Convert some small programs -[X] Error handling +- [X] Convert some small programs +- [X] Error handling - [X] All functions return `(type, error)` - [X] Convert `throw` to err return - [X] Non-leaf function calls need to check + bubble errors -[X] Array handling +- [X] Array handling - [X] Infer whether to use slice/map for PHP array -[-] Namespaces +- [-] Namespaces - [X] Basic support for `namespace` -> package name transformation - [ ] Resolve namespace names in calls - [ ] Resolve `use` statements -[X] `if` -[X] `for`/`foreach` -[X] `switch` -[ ] Generators -[ ] Goto -[X] `null` -> `nil` -[X] Consts and `define()` +- [X] `if` +- [X] `for`/`foreach` +- [X] `switch` +- [ ] Generators +- [ ] Goto +- [X] `null` -> `nil` +- [X] Consts and `define()` - [X] Magic constants (`__LINE__`,`__FILE__` etc) - [ ] Predefined constants (`PHP_VERSION`, `PHP_EOL`, `PHP_OS`, `PHP_INT_MAX` etc) -[ ] `isset`/`unset` -[ ] `instanceof` -[X] Ternary expressions +- [ ] `isset`/`unset` +- [ ] `instanceof` +- [X] Ternary expressions - Implemented as inline closure -[X] `die` -[X] `try`/`catch`/`finally` +- [X] `die` +- [X] `try`/`catch`/`finally` - [X] Implement using err checks, not panic/recover - Any statements within the try block should capture the finally/catch to run within any interior err-check blocks - [ ] `finally` - Runs before any return statement inside the try block or catch block; also runs after the try block is complete - Maybe `finally` would be more concisely implemented as defer inside an IIFE, but that is not idiomatic, maintainable Go code -[X] Abandon upon sight of highly dynamic constructs +- [X] Abandon upon sight of highly dynamic constructs - [X] `eval` - [X] `extract` - [ ] variable-variables - [ ] Attempts to enable magic_quotes or register_globals -[X] Detect assignment expressions +- [X] Detect assignment expressions - Go doesn't support assignment in rvalues, only as a statement - When walking below stmt level, need to first fully walk and check for any function calls + assignments that may need hoisting (and we can probably only do that correctly if there is no short-circuiting) - [X] Add subtree walk + catch error for this case -[X] Closures +- [X] Closures - [ ] Handle value/reference captures -[X] Convert top-level calls to `init()`/`main()` +- [X] Convert top-level calls to `init()`/`main()` - [X] Wrap in function - [X] Determine init/main based on package name -[ ] Class/object transformations +- [ ] Class/object transformations - [X] Convert `new X` constructor calls to `NewX` - [X] Visibility - [X] Apply PHP visibility modifiers as Go case change @@ -70,17 +70,17 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [ ] static:: - [ ] Traits / `use` - [ ] Abstract methods -[X] Track golang package imports -[X] Variadic function parameters -[X] Preserve comments +- [X] Track golang package imports +- [X] Variadic function parameters +- [X] Preserve comments ### Productionize -[ ] Multi-file programs +- [ ] Multi-file programs - [ ] Include/Require -[ ] Infer whether to declare variable (`var` / `:=`) or reuse (`=`) +- [ ] Infer whether to declare variable (`var` / `:=`) or reuse (`=`) - [ ] Track current visibility scope -[ ] Comprehensive coverage of all AST node types +- [ ] Comprehensive coverage of all AST node types - [X] Create full-coverage interface to implement - [ ] Node - [ ] Stmt @@ -89,17 +89,17 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [X] Binary - [X] Scalar - [X] Heredocs/nowdocs -[ ] Numbered break/continue -[ ] Type inference +- [ ] Numbered break/continue +- [ ] Type inference - [ ] Type declarations for literals (string, slice/map with constant initializer, etc) - [ ] Convert known PHP typenames to Go equivalents - [ ] Parse extra types from phpdoc blocks -[X] Hoisting pass for rvalue expressions +- [X] Hoisting pass for rvalue expressions - [X] Preincrement statements - [ ] Behaviour of function calls in rvalue cases where err cannot be checked - [ ] Assignment expressions - [ ] Alternately - we can support the form `if foo := bar(); foo {` -[ ] Simple standard library transformations +- [ ] Simple standard library transformations - [X] common string/array functions - [ ] More string/array functions - [ ] Top 100 from https://www.exakat.io/top-100-php-functions/ @@ -107,12 +107,12 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - This has the same value semantics for ~~string literals, but not variables~~ all cases - [ ] error_reporting(E_ALL) --> just remove it - [ ] ini_set('display_errors', 'On') --> remove it when the parameter is known -[ ] Elide error return for functions that cannot throw +- [ ] Elide error return for functions that cannot throw - ?? Could be a standalone Go refactoring tool ### Moonshots -[ ] Extended library/environment transformations +- [ ] Extended library/environment transformations - [ ] Standard library transformations - [X] Track golang package imports - [ ] Handle conflicts between golang stdlib packages / local variable names @@ -129,18 +129,17 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [ ] AWS SDK - [ ] PHPUnit -> Go Test - [ ] Replace Composer/PSR-4 autoloading with Go imports -[ ] Preserve rough line spacing -[ ] Somehow detect whether map use should be order-preserving -[ ] Support scoped namespace (`namespace { ... }`) and multiple namespaces in file -[ ] Validation on imported comment formats -[ ] Convert wordpress / mediawiki / symfony +- [ ] Preserve rough line spacing +- [ ] Somehow detect whether map use should be order-preserving +- [ ] Support scoped namespace (`namespace { ... }`) and multiple namespaces in file +- [ ] Validation on imported comment formats +- [ ] Convert wordpress / mediawiki / symfony - [ ] Option to convert with preset=cli, preset=web, webroot path - [ ] Option to generate built-in web server -[ ] Generate source maps +- [ ] Generate source maps - The parser does have full positional information - exporting at the stmt level would be reasonable - But the gofmt pass may lose this information -[ ] Command-line tool option to `go run` - +- [ ] Command-line tool option to `go run` ## Reference