diff --git a/applications/ink-analyzer-phase-2.md b/applications/ink-analyzer-phase-2.md index 29ee9781693..898c83f8471 100644 --- a/applications/ink-analyzer-phase-2.md +++ b/applications/ink-analyzer-phase-2.md @@ -203,9 +203,9 @@ You can find a full list of available resources in the [introductory blog post f ### Overview -- **Total Estimated Duration:** ~6.75 months +- **Total Estimated Duration:** ~7.75 months - **Full-Time Equivalent (FTE):** 1 -- **Total Costs:** 48,000 USD +- **Total Costs:** 54,400 USD ### Milestone 1 — Semantic analyzer: Quick fixes, ink_e2e macro support, project creation command and code/intent actions for inserting code stubs/snippets for relevant ink! entities @@ -255,13 +255,43 @@ You can find a full list of available resources in the [introductory blog post f | 1. | Rust crate update: Go to definition support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns the location where the item resolved by the path (if any) is defined (e.g. for `#[ink::contract(env=crate::MyEnvironment)]`, returns the location where `MyEnvironment` item is defined). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | | 2. | Rust crate update: Find references support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns locations where the item resolved by the path (if any) is used (e.g. for `#[ink::contract(env=crate::MyEnvironment)]`, returns the locations where the `MyEnvironment` item is used). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | | 3. | Rust crate update: Rename/refactor support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code, a cursor position and the new name for the item as input and returns the text edits for renaming the item resolved by the path (if any) across the workspace (e.g. for a `MyEnvironment` defined used in an `#[ink::contract(env=crate::MyEnvironment)]` and an `#[ink_e2e::test(environment=crate::MyEnvironment)]`, this renames `MyEnvironment` across all these locations). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | -| 4. | Rust crate update: Diagnostics that verify that `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` are `impl Environment` as well as quick fixes to `impl Environment` for the target item where necessary | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code as input and returns the diagnostics for `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` whose target item doesn't `impl Environment` as well as quick fixes in the form of code/intent actions that insert code stubs/snippets that `impl Environment` for the target item where necessary. | +| 4. | Rust crate update: Diagnostics that verify that `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` are `impl Environment` as well as quick fixes to `impl Environment` for the target item where necessary | I will update the semantic analyzer crate by updating the existing interface that accepts ink! smart contract code as input and returns diagnostic errors and warnings to additionally return diagnostics for `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` whose target item doesn't `impl Environment` as well as quick fixes in the form of code/intent actions that insert code stubs/snippets that `impl Environment` for the target item where necessary. | -### Milestone 4 — Language Server: Updates -- **Estimated duration:** ~6-7 weeks +### Milestone 4 — Semantic Analyzer: Diagnostics, quick fixes and code/intent actions for chain extension `ErrorCode` type is `impl FromStatusCode` , and is not referred to using `Self::ErrorCode` anywhere in the chain extension or it's defined methods + +- **Estimated duration:** ~3 weeks +- **FTE:** 1 +- **Costs:** 5,600 USD + +| Number | Deliverable | Specification | +|--------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate update: Diagnostics that verify that the chain extension `ErrorCode` type is `impl FromStatusCode` as well as quick fixes and code/intent actions to `impl FromStatusCode` for the target item where necessary | I will update the semantic analyzer crate by updating the existing interface that accepts ink! smart contract code as input and returns diagnostic errors and warnings to additionally return diagnostics for chain extension `ErrorCode` types whose target item doesn't `impl FromStatusCode` as well as quick fixes in the form of code/intent actions that insert code stubs/snippets that `impl FromStatusCode` for the target item where necessary. | +| 2. | Rust crate update: Diagnostics for references to the chain extension's `ErrorCode` type using `Self::ErrorCode` in the chain extension (i.e. the `#[ink::chain_extension]` annotated `trait`) or it's defined methods (i.e. `impl` blocks for the chain extension `trait` in a `#[ink::contract]` annotated `mod`) as well as quick fixes to replace `Self::ErrorCode` usages with the `ErrorCode` type directly | I will update the semantic analyzer crate by updating the existing interface that accepts ink! smart contract code as input and returns diagnostic errors and warnings to additionally return diagnostics for references to the chain extension's `ErrorCode` type using `Self::ErrorCode` in the chain extension (i.e. the `#[ink::chain_extension]` annotated `trait`) or it's defined methods (i.e. `impl` blocks for the chain extension `trait` in a `#[ink::contract]` annotated `mod`) as well as quick fixes in the form of code/intent actions that replace `Self::ErrorCode` usages with the `ErrorCode` type directly. | + +### Milestone 5 — Language Server: Updates #1 + +- **Estimated duration:** ~3-4 weeks - **FTE:** 1 -- **Costs:** 12,800 USD +- **Costs:** 6,800 USD + +| Number | Deliverable | Specification | +|--------:|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the crate, instructions for installing and using the crate and links to other documentation and resources related to the crate. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust binary crate update: ink! Language Server updates | I will update Rust binary crate that implements the Language Server Protocol to support features added to the semantic analyzer in milestones 1 and 2 above. | + +### Milestone 6 — Language Server: Updates #2 + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USD | Number | Deliverable | Specification | |--------:|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -269,22 +299,22 @@ You can find a full list of available resources in the [introductory blog post f | **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the crate, instructions for installing and using the crate and links to other documentation and resources related to the crate. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | | **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 1. | Rust binary crate update: ink! Language Server updates | I will update Rust binary crate that implements the Language Server Protocol to support features added to the semantic analyzer in milestones 1, 2 and 3 above. | +| 1. | Rust binary crate update: ink! Language Server updates | I will update Rust binary crate that implements the Language Server Protocol to support features added to the semantic analyzer in milestones 3 and 4 above. | -### Milestone 5 — Visual Studio Code Extension: Updates +### Milestone 7 — Visual Studio Code Extension: Updates - **Estimated duration:** ~3-4 weeks - **FTE:** 1 - **Costs:** 6,800 USD -| Number | Deliverable | Specification | -|--------:|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **0a.** | License | GPL-3.0 | -| **0b.** | Documentation | I will provide inline source documentation and a README file (published on [Github](https://github.com/) and the [VS Code marketplace](https://marketplace.visualstudio.com/vscode)) providing general information about the extension, instructions for installing and using the extension and links to other documentation and resources related to the extension. | -| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive integration tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | -| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 0e. | Article | I will publish an **article** that introduces the new features of ink! analyzer, including updates to the VS Code extension, the language server and the semantic analyzer. | -| 1. | Visual Studio Code Extension: Updates | I will update the Visual Studio Code Extension to support the ink! language support features added to the language server and semantic analyzer in milestones 1, 2, 3 and 4 above. Visual interface demos of all the IDE/editor features can be found in VS Code extension documentation for [diagnostics](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#provide-diagnostics), [completions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-code-completion-proposals), [hover content](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [code actions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [quick fixes](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#possible-actions-on-errors-or-warnings), [signature help/parameter hints (demo uses functions but should still be helpful for interface visualization for ink! attribute arguments)](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#help-with-function-and-method-signatures), [inlay hints](https://code.visualstudio.com/docs/typescript/typescript-editing#_inlay-hints), [go to definition](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-definitions-of-a-symbol), [find references](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#find-all-references-to-a-symbol), [rename/refactor](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#rename-symbols), [snippets/code stubs](https://code.visualstudio.com/docs/typescript/typescript-editing#_snippets) and [commands](https://code.visualstudio.com/api/ux-guidelines/command-palette). | +| Number | Deliverable | Specification | +|--------:|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPL-3.0 | +| **0b.** | Documentation | I will provide inline source documentation and a README file (published on [Github](https://github.com/) and the [VS Code marketplace](https://marketplace.visualstudio.com/vscode)) providing general information about the extension, instructions for installing and using the extension and links to other documentation and resources related to the extension. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive integration tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that introduces the new features of ink! analyzer, including updates to the VS Code extension, the language server and the semantic analyzer. | +| 1. | Visual Studio Code Extension: Updates | I will update the Visual Studio Code Extension to support the ink! language support features added to the language server and semantic analyzer in milestones 1, 2, 3, 4, 5 and 6 above. Visual interface demos of all the IDE/editor features can be found in VS Code extension documentation for [diagnostics](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#provide-diagnostics), [completions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-code-completion-proposals), [hover content](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [code actions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [quick fixes](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#possible-actions-on-errors-or-warnings), [signature help/parameter hints (demo uses functions but should still be helpful for interface visualization for ink! attribute arguments)](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#help-with-function-and-method-signatures), [inlay hints](https://code.visualstudio.com/docs/typescript/typescript-editing#_inlay-hints), [go to definition](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-definitions-of-a-symbol), [find references](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#find-all-references-to-a-symbol), [rename/refactor](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#rename-symbols), [snippets/code stubs](https://code.visualstudio.com/docs/typescript/typescript-editing#_snippets) and [commands](https://code.visualstudio.com/api/ux-guidelines/command-palette). | ## Future Plans