blob: 4102cc70ac040c66f7a95ad49406040f19eff4ab [file] [log] [blame] [view] [edit]
# Fuchsia Shell
## Overview
The goal of the Fuchsia Shell project is to build a shell experience for
Fuchsia developers that is Fuchsia-first - that is, one that allows the user
to interact with a system running Fuchsia in a way that feels native to
Fuchsia, rather than being ported forward from some other system. The shell
is designed to allow you to manipulate FIDL interfaces, namespaces, Zircon
objects, and other core Fuchsia concepts.
## Getting started
To get started with the shell, simply add `"//src/developer/shell:cliff"` to
the packages you build. You can then invoke `cliff` from the `dash` command
line. As the shell evolves, it will eventually replace `dash`, and you will
not have to take the extra step of adding it to your build.
## Shell Language
### Variable declaration
You can declare a variable with `var` (meaning it is mutable), or `const`
(meaning it is immutable). Variables are declared with an initial value:
```
var a = 1
const b = 2
```
### Integers
Integers are arbitrary length two's complement integers, although our
implementation currently limits users to 64-bit signed two's complement.
Integer literals can be sequences of numbers (e.g., `12345`), or can be
separated into groups of 3 by the `_` character (e.g., `1_001` or
`123_456`).
## Testing
Changes to the shell can be exercised via the following test components:
| Directory | Test Name |
|-------------|-------------------------|
| parser | shell-parser-unittests |
| console | shell-console-unittests |
| josh | josh-tests |
| mirror | shell-mirror-tests |
| interpreter | shell-interpreter-tests |
For example, this will test the parser:
```
fx test shell-parser-unittests
```