parent
ca153a7d46
commit
a70b6a04b0
@ -1 +1,79 @@
|
||||
Test style guide, please ignore.
|
||||
## Languages Used
|
||||
|
||||
All game code is written to target C# 8.0. Auxiliary tools are written to target Python 3 or unix shell.
|
||||
|
||||
## C# Style Guide
|
||||
|
||||
The C# style guide is largely based on the [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html). Unless specified otherwise, do what the Google Java style guide recommends. Differences, or particular points worth additional note, are listed in the sections below.
|
||||
|
||||
|
||||
### Whitespace characters
|
||||
|
||||
Spaces only. No tabs. Manually indenting things to make things line up nicely is fine.
|
||||
|
||||
### Braces & blocks
|
||||
|
||||
Each new block is indented by two spaces.
|
||||
|
||||
We follow Google-style (K&R) brace & block structure, like this:
|
||||
```csharp
|
||||
if (foo) {
|
||||
bar;
|
||||
} else {
|
||||
blah;
|
||||
}
|
||||
```
|
||||
|
||||
rather than the more-common C# style which looks something like this:
|
||||
```csharp
|
||||
if (foo)
|
||||
{
|
||||
bar;
|
||||
}
|
||||
else
|
||||
{
|
||||
blah;
|
||||
}
|
||||
```
|
||||
|
||||
Braces are always used where optional, such as single-line if/while statements.
|
||||
|
||||
### Line Length
|
||||
|
||||
Maximum line length is 100 characters. Exception: `Levels.cs` (and similar files that are closer to *data* than *code*) can have lines of any length.
|
||||
|
||||
If a line is too long, prefer to line-wrap it at a higher syntactic level (as the Google Java guide suggests). When a line is broken at an operator, put the line-break *after* the operator (which is the opposite of what the Google Java guide suggests.)
|
||||
|
||||
Continuation lines should be indented by at least 4 spaces.
|
||||
|
||||
Example:
|
||||
```csharp
|
||||
if (LongMethodName() && reasonablyLengthyLocalVariable &&
|
||||
SomeOtherThing() {
|
||||
DoSomething();
|
||||
}
|
||||
```
|
||||
|
||||
### Names
|
||||
|
||||
Methods & functions are named with an initial capital letter, as is common in other C# code (`DoSomething()`, not `doSomething()`). So are public fields of classes and structs (including properties).
|
||||
|
||||
We generally follow Google's rules for treating acronyms as though they are a single word with only an initial capital letter (`FpsCounter`, not `FPSCounter`), with the exception that if a name is *entirely* an acronym, it stays entirely in uppercase (`AABB`, not `Aabb`). Once it's incorporated into a longer identifier by smooshing it together with some other word, it loses the all-caps treatment (`AabbList`, not `AABBList`).
|
||||
|
||||
Words in identifier names should be written out in full, with the following explicit exceptions which may be abbreviated:
|
||||
* `pos` instead of `position`
|
||||
* `rect` instead of `rectangle`
|
||||
|
||||
### Namespaces
|
||||
|
||||
All code is in `namespace SemiColinGames`. There are no sub-namespaces, with the exception of test code, which goes in `namespace SemiColinGames.Tests`.
|
||||
|
||||
### Source files & class names
|
||||
|
||||
Unlike in Java, source files in C# need not contain only a single top-level class. It is fine to group multiple closely-related classes or structs into a single file, if it makes sense to do so.
|
||||
|
||||
If a file contains only a single class, the filename should match the name of that class.
|
||||
|
||||
### Extension Methods
|
||||
|
||||
All definitions of extension methods must be in the file `ExtensionMethods.cs`.
|
Loading…
Reference in New Issue
Block a user