Alembicue: a Projectional Editor & IDE for Container Application Architecture
Total Page:16
File Type:pdf, Size:1020Kb
Computer Science 18COC251 B627091 Alembicue: A projectional editor & IDE for container application architecture George Garside Supervisor: Dr. Daniel Reidenbach Loughborough University Summer 2019 Abstract The lack of a competent integrated development environment for Docker is a detriment to the field of containerisation and cloud computing. This project documents the development of Alembicue, a projectional and productive Docker IDE, implementing a more formally specified language definition, representative of what is necessary to create imagesfor use with a containerisation platform. Alembicue guarantees syntactic correctness with a projectional editor mutating an abstract syntax tree, incorporating contextual intentions and quick fixes to suggest and automatically apply standards and best practices. Alembicue’s launch has been a success, being received well by the community with tens of thousands of interested visitors to the project page, and elated testimonials from those having used the application and the innovative concepts portrayed within. Acknowledgements I would like to thank my supervisor, Dr. Daniel Reidenbach, for his consistent support and valuable feedback on my work. I would also like to thank my family and friends for their support in my studies. ii alembicate, v. 1627. transitive. Chiefly figurative: to produce, refine, or transform (an idea, emotion, etc.) as if in an alembic. Cf. alembicated adj. cue, n.2 1553. 1c. A stimulus or signal to perception, articulation, or other physiological response. Oxford English Dictionary (1989). alembicue, n. 2019. Chiefly emblematic: the juncture of the production of imagery and the container articulation process founded on the aforesaid. With apologies to linguists. iii Contents I Foundation 1 1 Introduction 2 1.1 Overview . 2 1.2 Motivation . 2 1.3 Benefits . 3 1.4 Objectives . 4 1.4.1 Deliverables . 5 1.4.2 Deliverable constraints . 6 1.5 Methodology . 6 1.5.1 Formal methodologies . 6 1.5.2 Work plan . 7 2 Literature Review 8 2.1 Plain text editing . 8 2.2 Structure editing . 9 2.3 Projectional editing . 10 3 Background 11 3.1 Containerisation . 11 3.1.1 Images & containers . 11 3.1.2 Image build process . 11 3.2 Language workbenches . 12 3.2.1 Eclipse Xtext . 13 3.2.2 Whole Platform . 14 3.2.3 JetBrains MPS . 15 4 Gap Analysis 17 4.1 dockerfile-editor.com . 17 4.2 Visual Studio Code . 19 4.3 docker build . 21 5 Tools 22 5.1 Languages . 22 5.2 Environment . 23 5.3 Version control . 23 5.4 LATEX . 23 5.4.1 Document class . 24 5.4.2 Syntax diagram notation . 25 iv II Projectional Editor 26 6 Design 27 6.1 Aspects . 27 6.1.1 Concepts . 28 6.1.2 Editor . 30 6.2 Syntax highlighting . 30 6.3 Code completion . 31 6.4 Intentions . 32 6.4.1 Declaration . 32 6.4.2 Editor invocation . 32 6.4.3 More options . 33 6.5 Type system warnings, errors & info . 33 6.5.1 Resolving . 34 6.5.2 Suppressing . 34 6.6 Context assistant . 35 7 Type system 36 7.1 Instruction . 36 7.1.1 Keyword . 36 7.1.2 Editor components . 36 7.1.3 Behaviour . 37 7.2 Key-value . 38 7.2.1 KeyValue . 38 7.2.2 Key-value instruction . 39 7.3 File . 39 7.3.1 Element factory . 39 7.3.2 Behaviour . 40 7.3.3 Text generation . 40 7.4 BlankLine . 41 7.4.1 Instruction completion . 41 7.4.2 Instruction deletion . 43 7.5 Comment . 44 7.5.1 Line comments . 44 7.5.2 Inline comments . 45 8 Environment configuration 46 8.1 FROM . 46 8.1.1 Parameters to a build stage . 46 8.1.2 Image version either/or implementation . 46 8.1.3 Postfix version property code completion . 47 v 8.1.4 Placement of instruction . 48 8.1.5 Multi-stage builds . 48 8.2 LABEL, ENV & ARG . 50 8.2.1 Comparison . 50 8.2.2 ARG before FROM . 51 8.2.3 List folding . 51 9 Execution preparation 52 9.1 Command . 52 9.1.1 Changing command form . 52 9.1.2 Shell text generation . 53 9.2 Command instruction . 53 9.2.1 SHELL . ..