processing / processing/processing4
Improving Processing Error Messages
まだ誰も着手していません。
- 主要言語
- Java
- スター
- 494
- フォーク
- 183
- 平均マージ
- 4時間 39分
- マージ済み PR(30日)
- 3
説明
Created by: WillRabalais04
Processing Friendly Errors
We are building out friendly error message rewriting by extending the PreprocessIssueMessageSimplifier. To determine which errors to support, we worked with Raphaël and Sam to run a community survey.
Motivations
The results of the survey showed that although the error messages are usable, with an average clarity rating of 3.32 out of 5 there is room for improvement. The key elements that respondents identified as crucial for understanding error messages include the name and type of the error, specifics about what broke in the code, traceback to the specific line of the error, expected versus found outcomes, resources for contextualization and guidance, and possible solutions. Enhancing error messages based on the insights of the survey would greatly benefit the Processing user experience for beginners and advanced users alike. We hope to foster better understanding and more efficient problem-solving.
Currently Simplified Errors to Improve On
| Strategy | Current Error Output | Acknowledged In Survey | URL |
|---|---|---|---|
| InvalidIdentifierStrategy | Bad identifier? Did you forget a variable or start an identifier with digits near ‘statement’ | ✅ | Variables OR Variable Examples, Identifiers, Keywords & Statements |
| MismatchedInputSimplifierStrategy | Missing operator, semicolon, or ‘}’ near ‘statement’ | ✅ | Operators, Operators Example, Semicolons, Curly Braces & Statements |
| InvalidAssignmentStrategy | Possible error on variable assignment near ‘statement’ | ✅ | Variables OR Variable Examples, Assignment Operator & Statements |
| VariableDeclarationMissingTypeStrategy | Missing name or ; or type near ‘statement’ | ✅ | Variables OR Variable Examples, Semicolons, Identifiers & Statements |
| MissingCurlyAtStartSimplifierStrategy | Missing left curly bracket “{” | ✅ | Curly Braces |
| MissingCurlyAtSemicolonSimplifierStrategy | Missing right curly bracket “}” | ✅ | Curly Braces |
| UnbalancedChevStrategy | Missing '<' OR Missing '>' | ✅ | Generics, Generic Methods & Generics & Subtyping |
| InvalidGenericDefinitionStrategy | Possibly missing type in generic near ‘statement’ | ❌ | Generics, Generic Methods, Statements & Generics & Subtyping |
| MissingIdentifierSimplifierStrategy | Missing name or ; near ‘statement’ | ✅ | Identifiers & Statements |
| KnownMissingSimplifierStrategy | Missing “statement” | ❌ | Statements |
| ExtraneousInputSimplifierStrategy | ArithmeticException statement or extra code near ‘statement’ | ❌ | Arithmetic Exceptions, Operator Precedence & Statements |
| MissingClassNameStrategy | Missing name or ; near ‘statement’ | ❌ | Classes , Identifiers, Semicolons & Statements |
| MethodMissingNameStrategy | Missing name or ; near ‘statement’ | ❌ | Methods, Identifiers, Semicolons & Statements |
| ErrorOnParameterStrategy | Error on parameter or method declaration near ‘statement’ | ❌ | Parameters, Methods & Statements |
| MissingSingleQuoteStrategy | Missing “'” | ❌ | Chars |
| MissingDoubleQuoteStrategy | Missing “"” | ❌ | Strings |
| UnbalancedCurlyStrategy | Missing "{" OR Missing "}" | ✅ | Curly Braces |
| UnbalancedParenStrategy | Missing "(" OR Missing ")" | ✅ | Parentheses |
| DefaultMessageSimplifier |
|
n/a | TBD |
Errors to Add Strategies For
| Priority | Error |
|---|---|
| First |
|
| Secondary |
|
| TBD |
|
Unsupported Errors
The following will still operate as usual without rewriting / error simplification.
- Variable is named after keyword
- GLSL/Shader errors
- Compatibility issues with Android extensions
- Library errors
- Python errors
- p5.js errors
Error Message Template
| Optional? | Feature |
|---|---|
| ❌ | Processing found an error type error at [error line](link moves cursor to line number)! |
| ❌ | [error context] |
| ✅ | [reminder / additional context] OR We expected [expectation] but found [x]! |
| ✅ | We suggest [hint]! |
| ✅ | + More Info on: -[additional resources] |
| ❌ | ▶Click to See Original Error! [Toggles Original Error] * |
* The toggle to see the original error will be added at some point but likely will not be in the first version of the improved error messages as it may be difficult to implement.
Example 1: Array Index Out of Bound Exception
🔵 Processing says: Oops! It looks like you're trying to look at an item in your 'numbers' array that doesn't exist. (On line 3 in sketch_230707c.pde)
Remember, counting in Processing starts from 0, not 1. This means your 'numbers' array, which has 3 items, has positions labelled from 0 to 2. If you're trying to find an item at position 3 and above (or below 0), it won't work because there's no item there!
To fix this, make sure you're looking at positions that exist in your 'numbers' array, that is, positions from 0 to 2.
For more:https://processing.org/examples/array.html
Example 2: Invalid Identifier
🔵 Processing says: Uh-oh! There's an issue with a "bad identifier" in your code. Specifically, the issue is with 'int 9'. (On line 48 in sketch_230710a.pde)
In Processing, identifiers (like variable names, function names, etc.) can not start with a number and should only include letters, numbers, or underscores. Therefore, '9' is not a valid name.
Here's a quick fix: Try renaming your identifier so that it starts with a letter, dollar sign($) or an underscore(_). Make sure the name you choose is not a reserved keyword like "setup" or "width".
For more:
https://processing.org/examples/variables.html
https://processing.org/examples/functions.html
Incorporating Additional Resources Approach
- When directing the users to external resources the goal is to direct them towards Processing resources when possible and towards official Java documentation as a last resort as it is significantly less user friendly than Processing resources.
- To not overwhelm the user with links to external resources we will link them inline with the error message if the keyword is conveniently in the message itself otherwise they will be in the "For more:" section at the bottom. The "For more:" section will also contain examples of the concepts when applicable.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
java/src/processing/mode/java/preproc/PreprocessIssueMessageSimplifier.java から始め、既存の戦略を、調査結果、優先順位リスト、および提案されているエラーメッセージのテンプレートと照らし合わせて確認してください。この issue では、多くの例外種別と、メッセージ設計に関する複数の判断を扱います。完了とするには、合意したスコープと、関連するリソースおよびコンテキストに応じたガイダンスを含む、選択した分かりやすい書き換えの実装が必要です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- java
- 領域
- developer-experience
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100