easycoder 251104.1__tar.gz → 251104.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of easycoder might be problematic. Click here for more details.

Files changed (184) hide show
  1. easycoder-251104.2/.vscode/EXTENSION_GUIDE.md +77 -0
  2. easycoder-251104.2/.vscode/PYTHON_SETUP.md +107 -0
  3. easycoder-251104.2/.vscode/extensions/easycoder/README.md +67 -0
  4. easycoder-251104.2/.vscode/extensions/easycoder/language-configuration.json +26 -0
  5. easycoder-251104.2/.vscode/extensions/easycoder/package.json +41 -0
  6. easycoder-251104.2/.vscode/extensions/easycoder/snippets/easycoder.json +173 -0
  7. easycoder-251104.2/.vscode/extensions/easycoder/syntaxes/easycoder.tmLanguage.json +112 -0
  8. easycoder-251104.2/.vscode/settings.json +47 -0
  9. {easycoder-251104.1 → easycoder-251104.2}/PKG-INFO +1 -1
  10. {easycoder-251104.1 → easycoder-251104.2}/easycoder/__init__.py +1 -1
  11. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_classes.py +7 -2
  12. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_compiler.py +2 -1
  13. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_core.py +1 -1
  14. easycoder-251104.2/easycoder/ec_debug.py +464 -0
  15. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_program.py +17 -8
  16. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_pyside.py +2 -0
  17. {easycoder-251104.1 → easycoder-251104.2}/scripts/tests.ecs +1 -0
  18. easycoder-251104.2/test.py +5 -0
  19. easycoder-251104.1/test.py +0 -5
  20. {easycoder-251104.1 → easycoder-251104.2}/.github/copilot-instructions.md +0 -0
  21. {easycoder-251104.1 → easycoder-251104.2}/.gitignore +0 -0
  22. {easycoder-251104.1 → easycoder-251104.2}/LICENSE +0 -0
  23. {easycoder-251104.1 → easycoder-251104.2}/README.md +0 -0
  24. {easycoder-251104.1 → easycoder-251104.2}/backdrop.jpg +0 -0
  25. {easycoder-251104.1 → easycoder-251104.2}/doc/README.md +0 -0
  26. {easycoder-251104.1 → easycoder-251104.2}/doc/core/README.md +0 -0
  27. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/boolean.md +0 -0
  28. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/empty.md +0 -0
  29. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/ends.md +0 -0
  30. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/even.md +0 -0
  31. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/exists.md +0 -0
  32. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/greater.md +0 -0
  33. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/hasProperty.md +0 -0
  34. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/includes.md +0 -0
  35. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/is.md +0 -0
  36. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/less.md +0 -0
  37. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/list.md +0 -0
  38. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/none.md +0 -0
  39. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/not.md +0 -0
  40. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/numeric.md +0 -0
  41. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/object.md +0 -0
  42. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/odd.md +0 -0
  43. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/starts.md +0 -0
  44. {easycoder-251104.1 → easycoder-251104.2}/doc/core/conditions/string.md +0 -0
  45. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/add.md +0 -0
  46. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/append.md +0 -0
  47. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/assert.md +0 -0
  48. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/begin.md +0 -0
  49. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/clear.md +0 -0
  50. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/close.md +0 -0
  51. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/create.md +0 -0
  52. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/debug.md +0 -0
  53. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/decrement.md +0 -0
  54. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/delete.md +0 -0
  55. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/divide.md +0 -0
  56. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/exit.md +0 -0
  57. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/file.md +0 -0
  58. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/fork.md +0 -0
  59. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/get.md +0 -0
  60. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/go.md +0 -0
  61. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/gosub.md +0 -0
  62. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/if.md +0 -0
  63. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/import.md +0 -0
  64. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/increment.md +0 -0
  65. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/index.md +0 -0
  66. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/init.md +0 -0
  67. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/input.md +0 -0
  68. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/load.md +0 -0
  69. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/lock.md +0 -0
  70. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/log.md +0 -0
  71. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/module.md +0 -0
  72. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/multiply.md +0 -0
  73. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/negate.md +0 -0
  74. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/on.md +0 -0
  75. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/open.md +0 -0
  76. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/pop.md +0 -0
  77. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/post.md +0 -0
  78. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/print.md +0 -0
  79. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/push.md +0 -0
  80. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/put.md +0 -0
  81. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/read.md +0 -0
  82. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/release.md +0 -0
  83. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/replace.md +0 -0
  84. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/return.md +0 -0
  85. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/run.md +0 -0
  86. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/save.md +0 -0
  87. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/script.md +0 -0
  88. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/send.md +0 -0
  89. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/set.md +0 -0
  90. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/shuffle.md +0 -0
  91. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/split.md +0 -0
  92. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/stack.md +0 -0
  93. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/stop.md +0 -0
  94. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/system.md +0 -0
  95. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/take.md +0 -0
  96. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/toggle.md +0 -0
  97. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/truncate.md +0 -0
  98. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/unlock.md +0 -0
  99. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/use.md +0 -0
  100. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/variable.md +0 -0
  101. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/wait.md +0 -0
  102. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/while.md +0 -0
  103. {easycoder-251104.1 → easycoder-251104.2}/doc/core/keywords/write.md +0 -0
  104. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/arg.md +0 -0
  105. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/args.md +0 -0
  106. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/cos.md +0 -0
  107. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/datime.md +0 -0
  108. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/decode.md +0 -0
  109. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/element.md +0 -0
  110. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/elements.md +0 -0
  111. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/empty.md +0 -0
  112. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/encode.md +0 -0
  113. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/error.md +0 -0
  114. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/files.md +0 -0
  115. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/float.md +0 -0
  116. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/from.md +0 -0
  117. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/hash.md +0 -0
  118. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/index.md +0 -0
  119. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/integer.md +0 -0
  120. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/json.md +0 -0
  121. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/keys.md +0 -0
  122. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/left.md +0 -0
  123. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/length.md +0 -0
  124. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/lowercase.md +0 -0
  125. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/memory.md +0 -0
  126. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/modification.md +0 -0
  127. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/modulo.md +0 -0
  128. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/newline.md +0 -0
  129. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/now.md +0 -0
  130. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/position.md +0 -0
  131. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/property.md +0 -0
  132. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/random.md +0 -0
  133. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/right.md +0 -0
  134. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/sin.md +0 -0
  135. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/stringify.md +0 -0
  136. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/tab.md +0 -0
  137. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/tan.md +0 -0
  138. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/timestamp.md +0 -0
  139. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/today.md +0 -0
  140. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/trim.md +0 -0
  141. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/type.md +0 -0
  142. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/uppercase.md +0 -0
  143. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/value.md +0 -0
  144. {easycoder-251104.1 → easycoder-251104.2}/doc/core/values/weekday.md +0 -0
  145. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/README.md +0 -0
  146. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/attach.md +0 -0
  147. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/close.md +0 -0
  148. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/create.md +0 -0
  149. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/ellipse.md +0 -0
  150. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/image.md +0 -0
  151. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/move.md +0 -0
  152. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/on.md +0 -0
  153. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/rectangle.md +0 -0
  154. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/render.md +0 -0
  155. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/run.md +0 -0
  156. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/set.md +0 -0
  157. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/keywords/text.md +0 -0
  158. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/values/attribute.md +0 -0
  159. {easycoder-251104.1 → easycoder-251104.2}/doc/graphics/values/window.md +0 -0
  160. {easycoder-251104.1 → easycoder-251104.2}/easycoder/close.png +0 -0
  161. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_border.py +0 -0
  162. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_condition.py +0 -0
  163. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_handler.py +0 -0
  164. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_keyboard.py +0 -0
  165. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_timestamp.py +0 -0
  166. {easycoder-251104.1 → easycoder-251104.2}/easycoder/ec_value.py +0 -0
  167. {easycoder-251104.1 → easycoder-251104.2}/easycoder/tick.png +0 -0
  168. {easycoder-251104.1 → easycoder-251104.2}/images/Semoigo Dawn.jpg +0 -0
  169. {easycoder-251104.1 → easycoder-251104.2}/json/graphics-demo.json +0 -0
  170. {easycoder-251104.1 → easycoder-251104.2}/plugins/ec_keyboard.py +0 -0
  171. {easycoder-251104.1 → easycoder-251104.2}/plugins/ec_p100.py +0 -0
  172. {easycoder-251104.1 → easycoder-251104.2}/plugins/ec_pyside6.py +0 -0
  173. {easycoder-251104.1 → easycoder-251104.2}/plugins/points.py +0 -0
  174. {easycoder-251104.1 → easycoder-251104.2}/plugins/sql.py +0 -0
  175. {easycoder-251104.1 → easycoder-251104.2}/pyproject.toml +0 -0
  176. {easycoder-251104.1 → easycoder-251104.2}/scripts/benchmark.ecs +0 -0
  177. {easycoder-251104.1 → easycoder-251104.2}/scripts/ec_keyboard.py +0 -0
  178. {easycoder-251104.1 → easycoder-251104.2}/scripts/fizzbuzz.ecs +0 -0
  179. {easycoder-251104.1 → easycoder-251104.2}/scripts/hello.ecs +0 -0
  180. {easycoder-251104.1 → easycoder-251104.2}/scripts/points.ecs +0 -0
  181. {easycoder-251104.1 → easycoder-251104.2}/scripts/test.ecs +0 -0
  182. {easycoder-251104.1 → easycoder-251104.2}/testrc.py +0 -0
  183. {easycoder-251104.1 → easycoder-251104.2}/testsql.py +0 -0
  184. {easycoder-251104.1 → easycoder-251104.2}/testui.py +0 -0
@@ -0,0 +1,77 @@
1
+ # VS Code EasyCoder Extension Installation
2
+
3
+ The EasyCoder language extension has been created and installed for VS Code.
4
+
5
+ ## What's Included
6
+
7
+ 1. **Syntax Highlighting** - Keywords, strings, numbers, and comments are color-coded
8
+ 2. **Code Snippets** - Quick templates for common patterns (type prefix + Tab)
9
+ 3. **Auto-completion** - IntelliSense suggestions as you type
10
+ 4. **Auto-closing** - Brackets, quotes, and parentheses close automatically
11
+ 5. **Comment Toggling** - Use Ctrl+/ to toggle line comments
12
+
13
+ ## Installation
14
+
15
+ The extension has been copied to: `~/.vscode/extensions/easycoder/`
16
+
17
+ **To activate:**
18
+ 1. Reload VS Code: Press `Ctrl+Shift+P` and type "Reload Window"
19
+ 2. Open any `.ecs` file to see the features in action
20
+
21
+ ## Usage Examples
22
+
23
+ ### Using Snippets
24
+
25
+ Type these prefixes and press **Tab**:
26
+
27
+ - `script` + Tab → Creates full script template
28
+ - `if` + Tab → Creates if-else block
29
+ - `while` + Tab → Creates while loop
30
+ - `variable` + Tab → Declares a variable
31
+ - `set` + Tab → Sets variable value
32
+ - `print` + Tab → Print statement
33
+ - `log` + Tab → Log with timestamp
34
+
35
+ ### Auto-completion
36
+
37
+ As you type EasyCoder keywords, VS Code will show suggestions:
38
+ - Type `var` → suggests `variable`
39
+ - Type `app` → suggests `append`
40
+ - Type `mul` → suggests `multiply`
41
+
42
+ ### Comment Toggling
43
+
44
+ - Select lines and press `Ctrl+/` to toggle comments
45
+ - Comments in EasyCoder start with `!`
46
+
47
+ ## Testing
48
+
49
+ Open one of your existing scripts to test:
50
+ ```bash
51
+ code scripts/hello.ecs
52
+ ```
53
+
54
+ You should see:
55
+ - Syntax highlighting for keywords
56
+ - Colored strings and numbers
57
+ - IntelliSense suggestions as you type
58
+ - Snippet suggestions when typing common prefixes
59
+
60
+ ## Troubleshooting
61
+
62
+ If the extension doesn't activate:
63
+ 1. Reload Window: `Ctrl+Shift+P` → "Reload Window"
64
+ 2. Check file extension is `.ecs`
65
+ 3. Verify extension is in `~/.vscode/extensions/easycoder/`
66
+ 4. Restart VS Code completely
67
+
68
+ ## Customization
69
+
70
+ To modify the extension, edit files in:
71
+ `.vscode/extensions/easycoder/`
72
+
73
+ - `syntaxes/easycoder.tmLanguage.json` - Syntax highlighting rules
74
+ - `snippets/easycoder.json` - Code snippets
75
+ - `language-configuration.json` - Language behavior settings
76
+
77
+ After changes, reload VS Code to see updates.
@@ -0,0 +1,107 @@
1
+ # Python Autocompletion Setup Guide
2
+
3
+ ## Current Configuration
4
+
5
+ VS Code workspace settings have been configured for optimal Python autocompletion in `.vscode/settings.json`.
6
+
7
+ ## Features Enabled
8
+
9
+ ### Python IntelliSense Features:
10
+ 1. **Type Checking** - Basic type checking for better suggestions
11
+ 2. **Auto-Import Completions** - Automatically suggests and adds imports
12
+ 3. **Function Parentheses** - Automatically adds `()` when completing functions
13
+ 4. **Parameter Hints** - Shows function signatures as you type
14
+ 5. **Inlay Hints** - Shows type information inline
15
+ 6. **Quick Suggestions** - Fast autocompletion as you type (10ms delay)
16
+ 7. **Tab Completion** - Press Tab to accept suggestions
17
+ 8. **Bracket Auto-completion** - Adds brackets when completing functions
18
+
19
+ ### Project-Specific Configuration:
20
+ - Extra paths include `easycoder/` and `plugins/` directories
21
+ - Workspace-wide analysis for cross-file completions
22
+ - Semantic highlighting enabled
23
+ - EasyCoder (`.ecs`) files properly associated
24
+
25
+ ## Required Extension
26
+
27
+ Make sure you have the **Python extension** installed:
28
+
29
+ 1. Press `Ctrl+Shift+X` to open Extensions
30
+ 2. Search for "Python"
31
+ 3. Install "Python" by Microsoft (if not already installed)
32
+ 4. The extension includes **Pylance** for advanced IntelliSense
33
+
34
+ ## Testing Python Autocompletion
35
+
36
+ Try opening any Python file and test:
37
+
38
+ ```bash
39
+ code easycoder/ec_core.py
40
+ ```
41
+
42
+ ### What You Should See:
43
+
44
+ 1. **Import Suggestions**: Type `import ` and see module suggestions
45
+ 2. **Method Completion**: Type `self.` and see all available methods
46
+ 3. **Parameter Hints**: Type a function name and `(` to see parameters
47
+ 4. **Type Information**: Hover over variables to see type info
48
+ 5. **Quick Info**: Hover over functions to see docstrings
49
+
50
+ ### Example Test:
51
+
52
+ Open `easycoder/ec_core.py` and try:
53
+ - Type `self.get` - should suggest `getToken()`, `getValue()`, etc.
54
+ - Type `command['` - should suggest dictionary keys
55
+ - Hover over method names - should show docstrings
56
+
57
+ ## Keyboard Shortcuts
58
+
59
+ - `Ctrl+Space` - Trigger IntelliSense manually
60
+ - `Ctrl+Shift+Space` - Show parameter hints
61
+ - `Tab` - Accept suggestion
62
+ - `Esc` - Dismiss suggestion
63
+ - `F12` - Go to definition
64
+ - `Alt+F12` - Peek definition
65
+ - `Shift+F12` - Find all references
66
+
67
+ ## Customization
68
+
69
+ To adjust settings, edit `.vscode/settings.json`:
70
+
71
+ - Adjust `editor.quickSuggestionsDelay` (default: 10ms)
72
+ - Toggle `python.analysis.typeCheckingMode` (off/basic/strict)
73
+ - Enable/disable `editor.formatOnSave`
74
+
75
+ ## For EasyCoder Files
76
+
77
+ The settings also enhance `.ecs` file editing:
78
+ - Word-based suggestions from all EasyCoder files
79
+ - Suggests variable names and labels you've used
80
+ - Works alongside the syntax highlighting
81
+
82
+ ## Troubleshooting
83
+
84
+ If autocompletion isn't working:
85
+
86
+ 1. **Reload Window**: `Ctrl+Shift+P` → "Reload Window"
87
+ 2. **Check Python Extension**: Ensure it's installed and enabled
88
+ 3. **Select Python Interpreter**: `Ctrl+Shift+P` → "Python: Select Interpreter"
89
+ 4. **Restart Language Server**: `Ctrl+Shift+P` → "Python: Restart Language Server"
90
+ 5. **Clear Cache**: Close VS Code, delete `.vscode/.ropeproject/` if it exists
91
+
92
+ ## Additional Tips
93
+
94
+ - IntelliSense learns from your code as you type
95
+ - The more you work in the project, the better suggestions become
96
+ - Pylance indexes the entire workspace for accurate completions
97
+ - Use type hints in your code for even better suggestions
98
+
99
+ ## Performance
100
+
101
+ Settings are optimized for:
102
+ - Fast suggestion display (10ms delay)
103
+ - Workspace-wide indexing
104
+ - Cross-file intelligence
105
+ - Module import suggestions
106
+
107
+ Reload VS Code (`Ctrl+Shift+P` → "Reload Window") to activate all settings!
@@ -0,0 +1,67 @@
1
+ # EasyCoder Language Support for VS Code
2
+
3
+ Provides language support for EasyCoder (`.ecs`) files.
4
+
5
+ ## Features
6
+
7
+ - **Syntax Highlighting**: Colorizes keywords, operators, strings, numbers, and comments
8
+ - **Code Snippets**: Quick templates for common EasyCoder patterns
9
+ - **Auto-completion**: IntelliSense support for EasyCoder commands
10
+ - **Bracket Matching**: Automatic bracket, parenthesis, and quote pairing
11
+ - **Comment Support**: Line comments with `!`
12
+
13
+ ## Installation
14
+
15
+ To use this extension locally:
16
+
17
+ 1. Copy the `easycoder` folder to your VS Code extensions directory:
18
+ - Linux/Mac: `~/.vscode/extensions/`
19
+ - Windows: `%USERPROFILE%\.vscode\extensions\`
20
+
21
+ 2. Restart VS Code
22
+
23
+ 3. Open any `.ecs` file to see syntax highlighting and autocompletion
24
+
25
+ ## Available Snippets
26
+
27
+ Type these prefixes and press Tab to insert:
28
+
29
+ - `script` - Basic script template
30
+ - `variable` - Variable declaration
31
+ - `set` - Set variable value
32
+ - `if` - If-else statement
33
+ - `while` - While loop
34
+ - `print` - Print statement
35
+ - `log` - Log with timestamp
36
+ - `onerror` - Error handler
37
+ - `add` - Add to variable
38
+ - `append` - Append to array
39
+ - `get` - GET REST request
40
+ - `post` - POST REST request
41
+ - `open` - Open file
42
+ - `read` - Read from file
43
+ - `write` - Write to file
44
+ - `use` - Import plugin
45
+ - `goto` - Go to label
46
+ - `gosub` - Call subroutine
47
+ - `input` - Get user input
48
+ - `assert` - Assert condition
49
+ - `index` - Set array index
50
+ - `split` - Split string
51
+
52
+ ## Keywords
53
+
54
+ The extension recognizes all EasyCoder core keywords including:
55
+ - Control flow: `if`, `else`, `while`, `goto`, `gosub`, `return`
56
+ - Variables: `variable`, `set`, `clear`
57
+ - Arithmetic: `add`, `multiply`, `divide`, `increment`, `decrement`
58
+ - Arrays: `append`, `pop`, `push`, `index`, `shuffle`
59
+ - I/O: `print`, `log`, `input`, `read`, `write`, `open`, `close`
60
+ - REST: `get`, `post`, `send`
61
+ - And many more...
62
+
63
+ ## About EasyCoder
64
+
65
+ EasyCoder is a high-level English-like domain-specific scripting language implemented in Python.
66
+
67
+ For more information, visit: https://github.com/easycoder/easycoder-py
@@ -0,0 +1,26 @@
1
+ {
2
+ "comments": {
3
+ "lineComment": "! "
4
+ },
5
+ "brackets": [
6
+ ["{", "}"],
7
+ ["[", "]"],
8
+ ["(", ")"]
9
+ ],
10
+ "autoClosingPairs": [
11
+ { "open": "{", "close": "}" },
12
+ { "open": "[", "close": "]" },
13
+ { "open": "(", "close": ")" },
14
+ { "open": "`", "close": "`", "notIn": ["string"] },
15
+ { "open": "'", "close": "'", "notIn": ["string", "comment"] },
16
+ { "open": "\"", "close": "\"", "notIn": ["string"] }
17
+ ],
18
+ "surroundingPairs": [
19
+ ["{", "}"],
20
+ ["[", "]"],
21
+ ["(", ")"],
22
+ ["`", "`"],
23
+ ["'", "'"],
24
+ ["\"", "\""]
25
+ ]
26
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "easycoder",
3
+ "displayName": "EasyCoder Language Support",
4
+ "description": "Language support for EasyCoder scripts",
5
+ "version": "1.0.0",
6
+ "publisher": "easycoder",
7
+ "engines": {
8
+ "vscode": "^1.60.0"
9
+ },
10
+ "categories": [
11
+ "Programming Languages"
12
+ ],
13
+ "contributes": {
14
+ "languages": [
15
+ {
16
+ "id": "easycoder",
17
+ "aliases": [
18
+ "EasyCoder",
19
+ "easycoder"
20
+ ],
21
+ "extensions": [
22
+ ".ecs"
23
+ ],
24
+ "configuration": "./language-configuration.json"
25
+ }
26
+ ],
27
+ "grammars": [
28
+ {
29
+ "language": "easycoder",
30
+ "scopeName": "source.easycoder",
31
+ "path": "./syntaxes/easycoder.tmLanguage.json"
32
+ }
33
+ ],
34
+ "snippets": [
35
+ {
36
+ "language": "easycoder",
37
+ "path": "./snippets/easycoder.json"
38
+ }
39
+ ]
40
+ }
41
+ }
@@ -0,0 +1,173 @@
1
+ {
2
+ "Script Template": {
3
+ "prefix": "script",
4
+ "body": [
5
+ "script ${1:ScriptName}",
6
+ " ${2:! Your code here}",
7
+ " exit"
8
+ ],
9
+ "description": "Basic script structure"
10
+ },
11
+ "Variable Declaration": {
12
+ "prefix": "variable",
13
+ "body": [
14
+ "variable ${1:Name}"
15
+ ],
16
+ "description": "Declare a variable"
17
+ },
18
+ "Set Variable": {
19
+ "prefix": "set",
20
+ "body": [
21
+ "set ${1:variable} to ${2:value}"
22
+ ],
23
+ "description": "Set a variable value"
24
+ },
25
+ "If Statement": {
26
+ "prefix": "if",
27
+ "body": [
28
+ "if ${1:condition}",
29
+ " ${2:! code}",
30
+ "else",
31
+ " ${3:! else code}"
32
+ ],
33
+ "description": "If-else statement"
34
+ },
35
+ "While Loop": {
36
+ "prefix": "while",
37
+ "body": [
38
+ "while ${1:condition}",
39
+ "begin",
40
+ " ${2:! loop code}",
41
+ "end"
42
+ ],
43
+ "description": "While loop"
44
+ },
45
+ "Print": {
46
+ "prefix": "print",
47
+ "body": [
48
+ "print ${1:value}"
49
+ ],
50
+ "description": "Print a value"
51
+ },
52
+ "Log": {
53
+ "prefix": "log",
54
+ "body": [
55
+ "log ${1:message}"
56
+ ],
57
+ "description": "Log a message with timestamp"
58
+ },
59
+ "Error Handler": {
60
+ "prefix": "onerror",
61
+ "body": [
62
+ "on error",
63
+ " log error",
64
+ " exit"
65
+ ],
66
+ "description": "Error handler"
67
+ },
68
+ "Add": {
69
+ "prefix": "add",
70
+ "body": [
71
+ "add ${1:value} to ${2:variable}"
72
+ ],
73
+ "description": "Add to a variable"
74
+ },
75
+ "Append": {
76
+ "prefix": "append",
77
+ "body": [
78
+ "append ${1:value} to ${2:array}"
79
+ ],
80
+ "description": "Append to an array"
81
+ },
82
+ "Get REST": {
83
+ "prefix": "get",
84
+ "body": [
85
+ "get ${1:url} to ${2:variable}"
86
+ ],
87
+ "description": "GET request"
88
+ },
89
+ "Post REST": {
90
+ "prefix": "post",
91
+ "body": [
92
+ "post ${1:value} to ${2:url}"
93
+ ],
94
+ "description": "POST request"
95
+ },
96
+ "Open File": {
97
+ "prefix": "open",
98
+ "body": [
99
+ "open ${1:file} as ${2:mode}"
100
+ ],
101
+ "description": "Open a file"
102
+ },
103
+ "Read File": {
104
+ "prefix": "read",
105
+ "body": [
106
+ "read ${1:file} to ${2:variable}"
107
+ ],
108
+ "description": "Read from file"
109
+ },
110
+ "Write File": {
111
+ "prefix": "write",
112
+ "body": [
113
+ "write ${1:value} to ${2:file}"
114
+ ],
115
+ "description": "Write to file"
116
+ },
117
+ "Use Plugin": {
118
+ "prefix": "use",
119
+ "body": [
120
+ "use ${1:plugin-name}"
121
+ ],
122
+ "description": "Import a plugin"
123
+ },
124
+ "Fork Process": {
125
+ "prefix": "fork",
126
+ "body": [
127
+ "fork to ${1:label}"
128
+ ],
129
+ "description": "Fork a new process"
130
+ },
131
+ "Go to Label": {
132
+ "prefix": "goto",
133
+ "body": [
134
+ "go to ${1:label}"
135
+ ],
136
+ "description": "Go to a label"
137
+ },
138
+ "Gosub": {
139
+ "prefix": "gosub",
140
+ "body": [
141
+ "gosub to ${1:label}"
142
+ ],
143
+ "description": "Call a subroutine"
144
+ },
145
+ "Input": {
146
+ "prefix": "input",
147
+ "body": [
148
+ "input ${1:variable} with ${2:prompt}"
149
+ ],
150
+ "description": "Get user input"
151
+ },
152
+ "Assert": {
153
+ "prefix": "assert",
154
+ "body": [
155
+ "assert ${1:condition} with ${2:message}"
156
+ ],
157
+ "description": "Assert a condition"
158
+ },
159
+ "Index Array": {
160
+ "prefix": "index",
161
+ "body": [
162
+ "index ${1:variable} to ${2:index}"
163
+ ],
164
+ "description": "Set array index"
165
+ },
166
+ "Split String": {
167
+ "prefix": "split",
168
+ "body": [
169
+ "split ${1:string} on ${2:delimiter} into ${3:array}"
170
+ ],
171
+ "description": "Split a string"
172
+ }
173
+ }
@@ -0,0 +1,112 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
3
+ "name": "EasyCoder",
4
+ "scopeName": "source.easycoder",
5
+ "patterns": [
6
+ {
7
+ "include": "#comments"
8
+ },
9
+ {
10
+ "include": "#keywords"
11
+ },
12
+ {
13
+ "include": "#strings"
14
+ },
15
+ {
16
+ "include": "#numbers"
17
+ },
18
+ {
19
+ "include": "#operators"
20
+ },
21
+ {
22
+ "include": "#labels"
23
+ }
24
+ ],
25
+ "repository": {
26
+ "comments": {
27
+ "patterns": [
28
+ {
29
+ "name": "comment.line.exclamation.easycoder",
30
+ "match": "!.*$"
31
+ }
32
+ ]
33
+ },
34
+ "keywords": {
35
+ "patterns": [
36
+ {
37
+ "name": "keyword.control.easycoder",
38
+ "match": "\\b(add|append|assert|begin|clear|close|create|debug|decrement|delete|divide|download|end|exit|file|fork|get|go|goto|gosub|if|else|import|increment|index|init|input|load|lock|log|module|multiply|negate|on|open|pop|post|print|push|put|read|release|replace|return|run|save|script|send|set|shuffle|split|ssh|stack|stop|system|take|toggle|truncate|unlock|use|variable|wait|while|write)\\b"
39
+ },
40
+ {
41
+ "name": "keyword.operator.easycoder",
42
+ "match": "\\b(to|from|in|of|with|by|as|at|into|or|and|not|giving|size|binary|directory|error|step|compile|program|custom|stack)\\b"
43
+ },
44
+ {
45
+ "name": "storage.type.easycoder",
46
+ "match": "\\b(variable|file|stack|ssh)\\b"
47
+ }
48
+ ]
49
+ },
50
+ "strings": {
51
+ "patterns": [
52
+ {
53
+ "name": "string.quoted.backtick.easycoder",
54
+ "begin": "`",
55
+ "end": "`",
56
+ "patterns": [
57
+ {
58
+ "name": "constant.character.escape.easycoder",
59
+ "match": "\\\\."
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "name": "string.quoted.single.easycoder",
65
+ "begin": "'",
66
+ "end": "'",
67
+ "patterns": [
68
+ {
69
+ "name": "constant.character.escape.easycoder",
70
+ "match": "\\\\."
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "name": "string.quoted.double.easycoder",
76
+ "begin": "\"",
77
+ "end": "\"",
78
+ "patterns": [
79
+ {
80
+ "name": "constant.character.escape.easycoder",
81
+ "match": "\\\\."
82
+ }
83
+ ]
84
+ }
85
+ ]
86
+ },
87
+ "numbers": {
88
+ "patterns": [
89
+ {
90
+ "name": "constant.numeric.easycoder",
91
+ "match": "\\b\\d+(\\.\\d+)?\\b"
92
+ }
93
+ ]
94
+ },
95
+ "operators": {
96
+ "patterns": [
97
+ {
98
+ "name": "keyword.operator.comparison.easycoder",
99
+ "match": "(==|!=|<=|>=|<|>)"
100
+ }
101
+ ]
102
+ },
103
+ "labels": {
104
+ "patterns": [
105
+ {
106
+ "name": "entity.name.label.easycoder",
107
+ "match": "^\\s*[A-Za-z_][A-Za-z0-9_]*:"
108
+ }
109
+ ]
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "python.analysis.typeCheckingMode": "basic",
3
+ "python.analysis.autoImportCompletions": true,
4
+ "python.analysis.completeFunctionParens": true,
5
+ "python.analysis.autoFormatStrings": true,
6
+ "python.analysis.inlayHints.functionReturnTypes": true,
7
+ "python.analysis.inlayHints.variableTypes": true,
8
+ "python.languageServer": "Pylance",
9
+ "python.analysis.extraPaths": [
10
+ "${workspaceFolder}/easycoder",
11
+ "${workspaceFolder}/plugins"
12
+ ],
13
+ "python.autoComplete.addBrackets": true,
14
+ "python.analysis.indexing": true,
15
+ "editor.quickSuggestions": {
16
+ "other": true,
17
+ "comments": false,
18
+ "strings": true
19
+ },
20
+ "editor.suggest.insertMode": "replace",
21
+ "editor.suggestSelection": "first",
22
+ "editor.tabCompletion": "on",
23
+ "editor.parameterHints.enabled": true,
24
+ "editor.quickSuggestionsDelay": 10,
25
+ "[python]": {
26
+ "editor.defaultFormatter": "ms-python.python",
27
+ "editor.formatOnSave": false,
28
+ "editor.codeActionsOnSave": {
29
+ "source.organizeImports": "explicit"
30
+ },
31
+ "editor.wordBasedSuggestions": "matchingDocuments"
32
+ },
33
+ "[easycoder]": {
34
+ "editor.quickSuggestions": {
35
+ "other": true,
36
+ "comments": false,
37
+ "strings": true
38
+ },
39
+ "editor.wordBasedSuggestions": "allDocuments",
40
+ "editor.suggest.showWords": true
41
+ },
42
+ "files.associations": {
43
+ "*.ecs": "easycoder"
44
+ },
45
+ "editor.semanticHighlighting.enabled": true,
46
+ "python.analysis.diagnosticMode": "workspace"
47
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easycoder
3
- Version: 251104.1
3
+ Version: 251104.2
4
4
  Summary: Rapid scripting in English
5
5
  Keywords: compiler,scripting,prototyping,programming,coding,python,low code,hypertalk,computer language,learn to code
6
6
  Author-email: Graham Trott <gtanyware@gmail.com>
@@ -12,4 +12,4 @@ from .ec_pyside import *
12
12
  from .ec_timestamp import *
13
13
  from .ec_value import *
14
14
 
15
- __version__ = "251104.1"
15
+ __version__ = "251104.2"
@@ -1,6 +1,6 @@
1
1
  import sys
2
2
 
3
- class FatalError:
3
+ class FatalError(BaseException):
4
4
  def __init__(self, compiler, message):
5
5
  compiler.showWarnings()
6
6
  lino = compiler.tokens[compiler.index].lino
@@ -58,4 +58,9 @@ class Token:
58
58
  self.token = token
59
59
 
60
60
  class Object():
61
- pass
61
+ """Dynamic object that allows arbitrary attribute assignment"""
62
+ def __setattr__(self, name: str, value) -> None:
63
+ self.__dict__[name] = value
64
+
65
+ def __getattr__(self, name: str):
66
+ return self.__dict__.get(name)