This repo is a work in progress as Visual Studio Code is still in Beta by Microsoft. This plugin leverage the eWam API to let you edit eWam Code With Visual Studio Code.
- Visual Studio Code
- Advanced Framework
- eWam APIs
- Clone this repo
- Run
npm installin "server" folder - Run
npm installin "client" folder
- Run
code .in "server" folder to edit language server source code - Run
code .in "client" folder to edit extension source code- press F5 in VSCode from client workspace to run the extension
- press
F5to open a new window with your extension loaded - run your command from the command palette by pressing (
Ctrl+Shift+PorF1) and typingewam - set breakpoints in
extension.tsto debug the extension - find output from your extension in the debug console
Parsing errors iteration 2 : code analyzer feedback (also see Wynsure rules that are applied at save time: aClassOrModuelControler)
Synchronization : use the same code as the in-IDE synchronization, thus allowing for extensions (i.e. customizations used in Wynsure for various forms of sync)
dependencies and project Repository should also remove files that don't correspond to classes anymore
Implement contextual commands
Add watch on bundleIndex.json ? Yes : refresh cache because files may appear and or change bundle location.
Forbid Class/module checkout/modification for dependencies <= maybe, useless since dependencies are checked in (and should be kept by integrator), thus in readonly
Class/module documentation with more info : variables/methodes/types/constantes/scenarios / REIMPLEMS
Class tree as HTML preview
Module list as HTML preview
When opening a class/module, fold anotations
Provide custom syntax theme base on "Dark (Visual Studio)" theme.
"Open eWam" command
Handle "rebundling" (moving a project entity from its current bundle to a new one)
Ergonomic way to override variables and methods
Additional validations (check repo is writable)
Other entity management (create new scenario, translation, ...)
Verify compatibility 6.1 / 6.1.5 (test multi user) - seb
Demo video (with OBS - https://obsproject.com/download)
User documentation
Integrator documentation / guidelines
- Preparation de l’env VS Code
- Installation de nouveaux bundles tiers
- MAJ de bundles tiers
- Prise en compte des nouvelles classes de developeurs
- Bundle redesign
Bug fixes and ergonomy
- API performance (i.e. GetMetaInfo : 10s to get metainfo of aWFActor when AdvancedComponents not compiled, due to serializer)
- use Florian's serializer for simple records
- maybe cache metainfo in local file
- Improve "Find references" feature to provide position in file (use metainfo or maybe ewam-open:// URL ?)
- Explore ewam-open:// scheme handling with contentProviders, to lazy-load gold modules from URLs (might be useful in documentation or when accessing an entity we don't know the position yet) ... nothing left to do... we're nearly there !
- API performance (i.e. GetMetaInfo : 10s to get metainfo of aWFActor when AdvancedComponents not compiled, due to serializer)
API refactoring
- Get read of advanced framework
- APIs redesign : API restful (see swapi collections)
- rename API url in /ewam/api/rest/...
- Review APIs to use IsValid when necessary (checks entity is valid. Usefull when creating a new module / class to check if doesn't exist and name correct)
- Implement better outlining / metainfo production API
- Outlines and definitions should be provided after F7 parse
- API proper and accurate documentation
- API test
- Remove "name" to "label" renaming in aModuleDefAPI.CustomizeSerializer, aModuleDefAPI.Suggest and aMRS_MMBrowserAPI.searchEntities
- Since producing/parsing generates metainfo, and metainfo needs producing, the two should probably be returned by the same API
Code refactoring / architecturing / documentation
- Implement module management (open, save, parse, status update, etc).
- Implement metainfo query API
- Implement entity access management : local file + synchronization questions
- Implement "find entity" feature : look for any kind of entity : scenario, class, module, method, variable, constant, etc, and look at it in its container (class or module)
Breakpoint management
Debugger
Cache management
Improve "Find references" feature to provide position in file (use metainfo or maybe ewam-open:// URL ?)
- Explore ewam-open:// scheme handling with contentProviders, to lazy-load gold modules from URLs (might be useful in documentation or when accessing an entity we don't know the position yet).
- Review "Code Actions" feature : could be implemented using code analyzer
- Add watch on bundleIndex.json in order to detect bundle changes
#Demos
- verifications
- verify environment
- verify synced
- verify AdvancedComponents DLL is here
- verify source code is here
- start with demo script (see below)
- Add people in Skype conversation
- Feedback : review draft emails : provide links to IMUTs for and and evolutions
- Suggest LiceCAP (show how it works comment ça marche)
- Presentation de VS Code
- Extension eWam (marketplace)
- Gestion du multiworkspace
- Environnement Wynsure classique
- Lancer le service eWam
- Install extension
- Open Workspace Folder
/ Synchroniser
- Présenter repository : .dependencies .unbundled etc.
- Ouvrir une classe ou nouvelle classe (aApplicativeRoot)
/ CheckOut / Checkin
- Coding :
- Parse
- Errors
- Snipppets
- Suggestions
- Signature Help
- Run
- override
- Commenting
- Scenario Edition
- Navigation : - Tooltips
- Goto / Peek definition
=> aWFClient
- Document symbols
=> GetLogin
- Class documentation
- Text search
=> text search "GetLogin"
- Find all occurences
=> GetLogin of aWFActor
- Ergonomy
- Rename
- Checked in/out consistency
- Local / TGV version class/module consistency - Class tree
- Fonctionnalités de debug : breakpoint
- déploiement : quelques dev alpha
- accompagnement tutoriel
; aRedgisDemo (aApplicativeRoot) (Def Version:20) (Implem Version:20)
class aRedgisDemo (aApplicativeRoot) uses aWFDesc
type recordTypeName : record
field1 : Int4
field2 : Int4
endRecord
type recordTypeName2 : record (recordTypeName)
field3 : Int4
field4 : Int8
endRecord
type sequenceTypeName : sequence of recordTypeName2
[model(Text:'Assocoated Desc')]
[type:model(SingleRole:(WhatCanIDo:(CanSearch:false),RoleClass:'aSingleRoleType'))]
description : refTo [O] aWFDesc inverse MyOwner multiLang
procedure HelloWorld(Message1 : CString, Message2 : CString)
uses aWFClient, Motor
var recVar : recordTypeName2
var client : aWFClient
var login : CString
var res : Int4
Alert(Message1 + Message2)
client = Motor.NewInstFromName('aWFClient')
login = client.GetLogin
; res = Risky.CallWithMyStackEx(Nil, Nil, 0, 0, Nil)
self.description = Nil
endProc
; aVSCodeDemo (aApplicativeRoot) (Def Version:178) (Implem Version:189)
class aVSCodeDemo (aApplicativeRoot)
login : CString
procedure HelloWorld(message1 : CString, message2 : CString)
uses aWFActor
var extract : CString
var actor : aWFActor
new(actor)
self.login = ''
self.login = actor.GetLogin
self.Accept
extract = self.StringExtract(FullExtract, 0, 256)
Alert(message1 + ' ' + message2 + ' !')
Alert('coucou xD')
Alert('Super coucou :)')
dispose(actor)
endProc procedure HelloWorld2(param1 : CString, param2 : CString)
Alert(param1 + ' ' + param2 + ' !')
endProc /!\ Major API change : don't update unless WxWamAPI bundles have been installed in your environment. /!\
- Added .gitignore in Dev
- Fixed dependencies generation discrepencies (including file UTF8 encoding)
- Fixed source code character encoding problems
- Removed incorrect "eWam Parsing Ok" for now. Will rework this feature.
- Fixed default service network address to 127.0.0.1 rather then localhost
- Cut AdvancedFramework dependency for serialisation and REST routing
- Quick fix to open classes from the right location (dependencies / project)
- Changed default configuration for eWam Service port to comply with default configuration provided by eWam
- Refresh source from TGV
- Git free compliance
- Added Open IDE feature
- Added Stop Service feature
Bug fixes and ergonomy
- Fixed non-normalize path when opening a file
- Improved ignored patterns in .gitignore
- Improved eWam command names
- Fixed Open Reimplem
- Fixed buggy reimplem parsing (creates a new module when parsing a reimplem !! Oo)
- Fixed duplicated call to buildDependenciesRepo
- Fixed suggestion issue
- Fixed error when getting metainfo for an undefined class/module name
- Added file watching and metainfo refresh on focus
- Official plugin release
- Publish plugin on npm
Implement "Add scenario"
- Check aModuleDefAPI.CreateNewScenario code with Eric (modif implem as well as def ?)
Symbol renaming
- Module or class renaming
Class / module checkout state integrity
- set files in readonly when not checked out
Class / module version integrity : check implem versions (tgv versus local file) or maybe user eWam global version
- Open a compare when last known implem versions differ between TGV and local
Improved snippets
- Handle local metainfo cache file in order to help with consistency checking
Store metainfo and temp diff files in a .tmp folder in rootfolder
Bug fixes and ergonomy
- WhereUsed : method are shown in the result...
- GetNodeURL not working. Waiting for Advanced Framework fix (done, see Fred's email "RE: Bug dans le serializer ?")
- Fix Override
- Fix Toggle breakpoint
- After a rename, new source code seems not to be always regenerated correctly. <= this was due to errors. The resulting source wasn't truncated
- Annotation errors aren't retrieved
- [/] Parse / reformat isn't done in this case, eventhough no error is retrieved
- Save propably also fails, but no user feedback : provide notification in case of saving incorrectly parsed file
- crash on searchEntities with aWF* classes
Overriding
review diff / merge capabilities of VS Code (context of reimplems) : we diff whatever we want, using URI, so it could even be a content provider I expect
Bug fixes and ergonomy
- Module parsing error due to aClassPreparer
- Breakpoint API not working
- Breakpoint UI refreshing
- New class : wrong parent (also check new module)
- + improved new class input (choose parent class from a suggestion list)
- Crash when class already exist : used IsValid
- Repair Run Application
- [/] Add Open IDE feature
- Clean debug outputs
- Lookup API crashes
Add code snippets
Improve overall usability / stability, test all features ! Be the user developper.
- Implement a contextualized way to test things (run method, run class, run scenario ...)
- Make safe testing API blocking
sync all from VS Code (tgv sync + local dependencies + sync git)
- check git ignore
API: saves the module (ctrl+s) even if inconsistent
Bug fixes and ergonomy
- "UBS in ascendants" error on "proc". Should be raised as a syntax error. In the meantime: /ERRORMESSAGE:FALSE
- make /ERRORMESSAGE:FALSE default when launching as a service
- Module creation doesn't work ...
- Breakpoint API not working
[/] Add Open IDE featureImpossible
- "UBS in ascendants" error on "proc". Should be raised as a syntax error. In the meantime: /ERRORMESSAGE:FALSE
Improve "Find references" feature to provide position in file (use metainfo or maybe ewam-open:// URL ?)
- Explore ewam-open:// scheme handling with contentProviders, to lazy-load gold modules from URLs (might be useful in documentation or when accessing an entity we don't know the position yet).
Add watch on bundleIndex.json in order to detect bundle changes
review diff / merge capabilities of VS Code (context of reimplems)
- Source code management
- JSON package index file : description of the repository
- bundle JSON package : description file for a bundle, describing it's deliveries/classes/modules/everything content and hierarchy and it's URL !
- Dump repository from integrator env, based on bundles (+produce associated index and package files)
- Dump the dependencies source code
- Dump the workspace source code
- Dump repository based on given index file + bundle package files
- Keep a local VS Code cache of the classes bundles/deliveries. Keep in mind we the developper does not necessarily have the bundles / deliveries installed. Usually just synced from TGV
- Add watch on bundleIndex.json in order to detect bundle changes
[ ] Add workspace setting for the data repo building: Not really needed for now- Dump a module in the source repository based on bundleIndex.json file description and cache (e.g. in $rootPath/$Bundle/$Delivery/module.gold)
- Review plugin to account for these changes
- on the fly HTML documentation production (paths provided in the documentation links)
- path where the file of a module is retrieved when opening
- path where the file of a module is stored when saving
- review diff / merge capabilities of VS Code (context of reimplems)
> Execution of OPTIONS '/repository/generatePackagesIndex'...Done -- 0.021000 seconds.
> Execution of POST '/repository/generatePackagesIndex'...Done -- 91.665001 seconds.
> Execution of OPTIONS '/repository/buildProjectRepo'...Done -- 0.007000 seconds.
> Execution of POST '/repository/buildProjectRepo'...Done -- 99.942001 seconds.
> Execution of OPTIONS '/repository/buildDependenciesRepo'...Done -- 0.007000 seconds.
> Execution of POST '/repository/buildDependenciesRepo'...Done -- 295.181000 seconds.
Additional tasks :
- Create git repository for our environnement
Explore file:// scheme handling with contentProviders, to lazy-load gold modulesNot working : "Activating extensionmphasiswyde.ewamvscadaptorfailed: scheme 'file' already registered."- Explore ewam-open:// scheme handling with contentProviders, to lazy-load gold modules from URLs.
- API: saves the module (ctrl+s) even if inconsistent
- MMBrowser entry point : connection.onWorkspaceSymbol => metamodel browser request
- Improve "Find references" feature to provide position in file (use metainfo)
- Improve outline : display full path to entity
- Polish syntax highlighting : capture types in variable declarations
- Bug fixes and ergonomy
- fix item kind of suggestions
- Diagnostics doesn't work anymore (reformat not working anymore either)
- Improve overall usability / stability
- API performance : use Florian's serializer for simple records (i.e. GetMetaInfo : 10s to get metainfo of aWFActor when AdvancedComponents not compiled)
- Timer on parse
- Class tree visualization : handle directly the "select from name" based on the currently open module
- Class documentation : improve robustness
- Go to Definition on local variables
- Polish syntax highlighting
- Bug fixes
- Too large CString assignment
- "Go To Definition" doesn't work anymore
- Enable comments (i.e. CommentRule)
- Add "myText" in documentation for the outlines
[ ] Make method parameter suggestions be documented: Impossible due to underlying API restrictions- Class tree visualization : simple class tree interact
- Class documentation : explore possibilities offered by virtual documents (investigate how to implement the previewHtml, cf. https://code.visualstudio.com/updates/vJanuary#_extension-authoring, or Code Flower extension http://www.redotheweb.com/CodeFlower/, https://bitbucket.org/wynsure/code-flower-and-dependency-wheel) :
- unable to detect when we try to open a class (a file) from the preview links
- vscode.previewHtml seems buggy : if I open it, close the preview, and re-open it, a crash occurs
- Find references (Where used)
- APIs: make work parse (without save) + save
- Parse on open
- Parse (F7) should be only a parse, no save
- Native save (ctrl+s) : saves the module
- Signature completion
- Outline - regis
- Symbol navigation (in documentation navigation + go to definition) - regis
- Improve autocompletion (suggestions appear a bit randomly, and not when needed e.g. when typeing '.' or '(') - regis
- Improve usability : retrieve metainfo on open
- Improve outline and symbols APIs : use ProduceGold
- Syntax highlightings
- Code snippets
- Open a class,
Alt+o - Checkin a class
Alt+i - Open scenarios
Alt+s - Parse
F7 - Code completion
Ctrl +' ' - Deliver
Alt+d - Reimplem
Alt+r - New class
Alt+n - Meta info
Alt+m - Contextual buttons
- Run application
F5 - Override a method
- Toggle break points (via
Alt+m)
