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 install
in "server" folder - Run
npm install
in "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
F5
to open a new window with your extension loaded - run your command from the command palette by pressing (
Ctrl+Shift+P
orF1
) and typingewam
- set breakpoints in
extension.ts
to 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.ewamvscadaptor
failed: 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
)