[ Feature Request ] Top-level `use` statements should be permitted before namespace declarations/blocks
- 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
Assessment
This issue has not been assessed yet.