# 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
```