Skip to content

Instantly share code, notes, and snippets.

@ricardojlrufino
Last active July 16, 2017 20:30
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ricardojlrufino/19f89884162be39d851a to your computer and use it in GitHub Desktop.
Save ricardojlrufino/19f89884162be39d851a to your computer and use it in GitHub Desktop.
Arduino Work Log
==========================================================================================================================
Big IDE enchavements : AutoComplete(including user libs), Doc Tooltips, New SyntaxColoring, etc...
==========================================================================================================================
Progress:
=======================
- Autocomplete (95%)
- Realtime Parser and Error Marker(95%)
- Documentation in the Editor (in progress - 20%)
Tested On:
=======================
- Ubuntu 64bits ( Java 8/64bits and Java 7/32bits)
New Shortcuts
===========================
- HOME: toggles between first character on line and first non-whitespace character on line.
- INSERT: toggles between insert and overwrite modes.
- Ctrl+D: Delete current line
- Ctrl+DELETE: deletes all text between the caret and the end of the current line.
- Ctrl+Shift+Up and Ctrl+Shift+Down: move the current line up and down, respectively.
- Ctrl+J: joins lines.
- Ctrl+Z: is undo and Ctrl+Y is redo.
- Ctrl+Up and Ctrl+Down: shift the visible area of the text area up and down one line, respectively.
- F2 and Shift+F2: moves to the next and previous bookmarks,respectively.
- Ctrl+F2: toggles whether a bookmark is on the current line.
- Ctrl+arrow keys: Better keyboard navigation
- CTRL + / tootle comments
Autocomplete
===================
[X] Integration with the IDE (using: RSyntaxTextArea)
## Indexing of Libraries Classes
[*] Arduino Core (AVR)
NOTE: I believe you need to make manual adjustments, remove some useless things and add other (eg contants HIGH, LOW)
I'm not reading the #DEFINE for 'variables', because it will turn a mess.
[x] Multi Editor (many instances) support.
[x] User Lib's(3rd-party libs)
[x] Arduino Default Lib's
[x] Inheritance Support (Ex: Serial -> Stream -> Print)
[ ] Index only the important files of libs (for now is taking all .h)
## Autocomplete methods Classes
- [X] Instances
- [X] Static Classes
- [X] Pointer
- [X] Get the parameters of methods
- [X] Auto-Complete using partial name method (contains!)
- [X] Order by type
- [x] Handle Struct
[x] Handle static definition (Ex: EEPROM)
- [*] Handle extern (Ex: extern SPIClass SPI || extern EthernetClass Ethernet).
[] Multiple alias Ex: Serial1, Serial2, etc...
- [*] '#define' statements
I'm not reading the #DEFINE for 'variables', because it will turn a mess.
NOTE: not parsing blocks like: "#if defined(UBRR1H) extern HardwareSerial Serial1;" in HardwareSerial.h
[*] Disable on External MODE.
## Sketck - Autocomplete code being edited
[x] Show only included Classes.
[x] Show the variables of the current scope (use offset techniques)
[x] Detect current function (based at the cursor location)
[x] Update the position (offset) of the functions when the document is modified (new lines), without making the parser.
|- NOTES:
|- In Autocomplete they must appear first (deone).
|- Not perfect, variables declared in blocks (if / while) are considered as function scope, to improve the performace
[] Renaming / save as you must update the name in the Autocomplete Cache
- have to remove the libraries that BEEN REMOVED (imports removed ..) ...
[x] Parse source in-memory (do not need to save)
[x] No show 'functions' outsite functions, only show classes
[x] Detect custom variable names (EthernetClient client)
[x] When you open the existing Sketch loads the autocomplete for the added LIBs
[*] Parser in real time:
[x] Make the parser of changed line (ending with ';') and extract variables (and possibly errors).
[x] Perform parse if you are changing a line with errors (syntax)
[x] Perform parse if you are changing a line with errors (after compile)
[x] Perform parse if you are changing a line with variable declararion.
[] Enhancement: Parser current line using REXEX (for performance)
- IMPL NOTE: For while it is being made a parser all code, is fast but could be better
The whole parser was necessary because i had to update the position (offset) of the methods in the document,
but now this is already being done, I think a REGEX can be better
- NOTE: Only a parser(for same file) can run at the same time
[x] Async(Multi-tread) library parser... (based on Eclipse CDT AST Parser)
This is a external project: 'cplus-libparser', which can be used in other projects. ;)
[ ] Auto-Detect libraries dependency.
Related BUG: https://code.google.com/p/arduino/issues/detail?id=236
https://github.com/arduino/Arduino/pull/2174
[x] Auto generate variable names (ALT + ENTER) inside a function call (Ex: digitalRead(var))
[x] After inserting into code, it must also appear in autocomplete
[*] Auto-Complete of the main functions parameters
Ex: Serial.begin({lista develocidades}), digitalWrite( {variables} , [HIGH / LOW])
[ ] This information should be captured from the source code (documentation)
[*] Show syntax(parser) error's
NOTE: need to be well tested, I did a few tests
[x] Autocomplete for #include pick up all the libraries;
NOTE: The window of the options just close with ESC or when you click with the MOUSE out, not close with TAB
[*] - Update LibraryIndex/Autocomplete on change libs of sketch
[x] Fire on Import from Menu
[ ] Fire on Import from ZIP.
[*] Store/Load parsed result in lib.index on each folder..
[ ] establish policies to update the index (LibraryChangeMonitor (only for h. files))
- How to deal with the upgrade of core libraries? must validate the version?
[x] You may want to implement a Serializer / Deserializer (NOTE:for now the index is binary )
[] Use 'javax.swing.text.Document' to parser, to avoid strings allocations
TODO: It has not been confirmed whether there is this problem. but I think so ...
Need implement: org.eclipse.cdt.internal.core.parser.scanner.AbstractCharArray
[x] Automatic adjustment of the position of the tooltip(completions window) to left or right
[] BUG(linux): The autocomplete window not working when you have another window "always on TOP"
[x] Autocomplete Shortcut's
- dw,dr,aw,ar (digitalWrite, digitalRead, analogWrite, analogRead)
- for,if,while,println
[x] Autocomplete of Sketch with multiple files
[x] BUG: When the SAVE event is launched cache and clean and only the modified classes are analyzed
[x] includes with global methods.
[x] includes with structs and static var.
[x] SyntaxErrorMarker - when a error occur, the highlight appear in two tabs
[x] #include - add other files of current Sketch in autocomplete for #include
[x] Compiler/SyntaxError - show multiple compiler erros at same time
[x] BUG - autocomplete cache/listeners problem on 'saveAs' sketch (It is keeping two versions)
Editor
===================
[X] Swap lines using ALT+(UP/DOWN)
[X] word navigation - CTRL + (UP/DOWN/LEFT/RIGHT)
[x] Muli-line ident using TAB
[x] Auto-close / Identation brackets in if/method/etc..
[x] Auto ident on new Line.
[x] FIX/NEW: Goto line on ERROR and Highlight
[x] Automatic doc block closing
[x] Change TABS - Control+TAB / Control+SHIF+TAB(bugs on linux)
[x] Old Popup Menu (has been improved)
[x] Menu shortcuts (tests)
[x] Preferences: Show Lines Numbers
[*] Text / Documentation Links (CONTROL + CLICK)
[x] Open reference documentation using CONTROL + CLICK
[] Highlight the rows that were changed? with GREEN? and erase a block of code?
[x] Keep Selection / Cursor when switch between Tabs
[x] BUG: Line counter: this cutting the numbers starting Line 100
[x] Better tab header font render e dirty icon
[x] Suporte a UNDO/REDO em várias abas de forma independente
[X] Melhoria no sistema de Ctrl-z (ante voltava de 1 por 1 caracter ! muito chato...)
[x] FIX: Ugly Icon and Name on Linux (ALT+TAB Window)
[x] Show syntax errors (only to well Ugly Mistakes)
[X] Export to HTML/BBCODE (tested copy/past and online html viewer - http://jsfiddle.net/9wza5Lnh/2)
[x] MENU (Use Selection For Find) Removed - It was not working, and also normal Find already performs the same task
[x] Open Urls from Text
[x] Autoformat
[x] [Linux] Installation Script that creates shortcuts on the menu and desktop (with SplashScreen)
[x] [Linux] Best ICON for Alt+TAB
[x] fix CTRL+'/' not working on Linux (with new Editor) (need test on MacOS !)
[*] Multi-Tab Support
[x] Independent Undo/redo
[ ] Some features do not work properly (as Mark Ocorrences and Code Fold)
NOTE: if disabled, can you use without problems
- A more drastic strategy was to use an instance of Textarea for each tab.
BUG: https://github.com/bobbylight/RSyntaxTextArea/issues/84
[*] Internal Documentation Browser
- This is still in development
[x] Linked on Editor Click !
[x] Show documentation Tootip on Hover classes in editor.
[] Bug tooltipsize: https://github.com/bobbylight/RSyntaxTextArea/issues/81
[] Use Doxygen to generate small documentation block's (for each method) for tooltip.
NOTE: For now, i'm using current reference files (BIGG HTML FILES !!!) and spliting html (performace problem !!!)
[] From Source-code - takes the source code documentation
NOTE: already figured out how to do, but need to create the documentation standardization
[*] Editor Color Shema (using XML Config from: lib/theme/syntax/).
NOTA:The old classes TextAreaDefaults, THEME, no longer fit for that.sso.
[] Open XML and allow edit (GUI or TEXT?)
[] Add the option in the preferences to select the theme file
Refractor
===================
Because the changes in version 1.6 and 1.5.x it possibly will not be done ...
[ ] SketchCode - removed 'String program' - the only function was to occupy more memory
the ' document ' in itself is the ' program '
[ ] SketchCode (tabs) - load on demand.
Known bugs
=========================
[ ] uint8_t uint8_t did not appear in autocomplete
[] autocomplete - instance of instance (OpenDevice.deviceManager.method)
[] atoi not found in the autocomplete (abs found)
[] blank menu (a think si because of UNDO handling)
[] Autocomplete for 2 char sketch variable problems (like TV/SD library)
[] Macro recogonized as global function (invert() instead of TVout.invert();
[] Include Include only works if via autocomplete (copy-paste not working)
[] When you paste a sketch the parser should be performed, including detect libraries (normal parser does not)
[] CplusLibPaser - Inner class like callbacks not work
[] #define EthernetClient UIPClient (is in anoter file) not in autocomplete
[] Small problem when have two classes with same name ! EthernetClient on UIP has detected as Ethernet lib
News Todo:
==========
[ ] Highlight numbers in Console
- http://stackoverflow.com/questions/23041132/highlighting-numbers-in-jtextpane-using-regex
[] improvement: documentação - colocar uma configuração para saber se é SOMENTE MOUSE-OVER (ou precisa do CTRL)
[] improvement: onfiguração para mostrar ou não no autocomplete.
[ ] Parser - Recognition of the NameSpace (not working)
[] Test performance on a virtual machine
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment