facebook / facebook/hhvm

[ Feature Request ] Top-level `use` statements should be permitted before namespace declarations/blocks

Open
#8,514 6 comments 0 reactions 0 assignees View on GitHub
feature request
Dominant language
C++
Stars
18.7k
Forks
3.1k
Avg merge
1h 47m
Merged PRs (30d)
2

Description

### HHVM Version

```
HipHop VM 4.8.0 (rel)
Compiler: 1559583155_055573146
Repo schema: bbe84ac83be4cac392df68fc2c6cc8b7c6516bfd
hackc-e178a2330ba29a6fff3a77b4d56e11cc33959179-4.8.0
```

### Operating System and Version
Ubuntu 18.04 (desktop edition)

### Standalone code, or other way to reproduce the problem

```HACK
use namespace HH\Lib\{C, Vec};

namespace AnyNamespace {
function useless(): void {
C\count(Vec\filter(vec[]));
}
}
```

### Actual result

```
Parsing[1002] No code may exist outside of namespace {}
--> src/namespace.hack
3 | namespace AnyNamespace {
| ^^^^^^^^^^^^^^^^^^^^^^^^

Parsing[1002] Namespace declaration statement has to be the very first statement in the script
--> src/namespace.hack
3 | namespace AnyNamespace {
| ^^^^^^^^^^^^^^^^^^^^^^^^
```

### Expected result
There is no reason to restrict the usage of namespace groupings like this, since the code is functionally equivalent to:

```HACK
use namespace HH\Lib\C;
use namespace HH\Lib\Vec;

namespace AnyNamespace {
function useless(): void {
C\count(Vec\filter(vec[]));
}
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.