diff --git a/README.md b/README.md index a5f4eb4..8acd5e0 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [X] Convert `throw` to err return - [ ] Elide error return for functions that cannot throw - ?? Could be a standalone Go refactoring tool - - [ ] Non-leaf function calls need to check + bubble errors + - [X] Non-leaf function calls need to check + bubble errors - [ ] Behaviour of function calls in rvalue cases where err cannot be checked [ ] Comprehensive coverage of all AST node types - [ ] Node @@ -25,19 +25,26 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [ ] Infer whether map use should be order-preserving [ ] Multi-file programs - [ ] Include/Require -[ ] Namespaces +[X] Namespaces + - [X] Basic support for `namespace` -> package name transformation + - [ ] Namespace resolution in calls + - [ ] `use` + - [ ] Support scoped namespace (`namespace { ... }`) and multiple namespaces in file [ ] Generators [ ] Numbered break/continue [ ] Goto [ ] Comma operator [ ] `null` -> `nil` -[ ] Consts and `define()` +[X] Consts and `define()` [ ] `isset`/`unset` [ ] `instanceof` +[X] `die` [X] `try`/`catch`/`finally` - - [X] Implement using err checks, not panic/recover - - Maybe `finally` would be more accurately implemented as defer inside an IIFE, but that is not idiomatic, maintainable Go code. + - [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 [ ] Abandon upon sight of `eval` / `extract` / ... [ ] Assignment expressions - Go doesn't support assignment in rvalues, only as a statement @@ -57,6 +64,7 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [X] Static methods - [X] Inheritance *partial* - [X] Interfaces + - [X] Class constants - [X] super - [X] Need to track current conversion state through into function generator, to select the concrete parent - [X] parent:: @@ -71,7 +79,7 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [ ] Track current visibility scope [ ] Library/environment transformations - [ ] Standard library transformations - - [ ] Track golang package imports + - [X] Track golang package imports - [ ] Handle conflicts between golang stdlib packages / local variable names - [ ] uasort -> sort.Slice - [ ] Output buffering (`ob_start` / `ob_get_clean`) @@ -91,4 +99,6 @@ The goal is to produce idiomatic, maintainable Go code as part of a one-off conv - [ ] Option to convert with preset=cli, preset=web, webroot path - [ ] Option to generate built-in web server [ ] 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`