diff --git a/_data/specification-toc.yml b/_data/specification-toc.yml
index 2d7538a..c2c8f3f 100644
--- a/_data/specification-toc.yml
+++ b/_data/specification-toc.yml
@@ -121,6 +121,8 @@
- title: Change Log
anchor: changeLog
children:
+ - title: 3.10.0
+ anchor: version_3_10_0
- title: 3.9.0
anchor: version_3_9_0
- title: 3.8.0
diff --git a/specification.md b/specification.md
index b3e1f6c..c6493bc 100644
--- a/specification.md
+++ b/specification.md
@@ -3067,9 +3067,88 @@ interface DocumentSymbolParams {
```
_Response_:
-* result: `SymbolInformation[]` \| `null` defined as follows:
+* result: `DocumentSymbol[]` \| `SymbolInformation[]` \| `null` defined as follows:
```typescript
+/**
+ * A symbol kind.
+ */
+export namespace SymbolKind {
+ export const File = 1;
+ export const Module = 2;
+ export const Namespace = 3;
+ export const Package = 4;
+ export const Class = 5;
+ export const Method = 6;
+ export const Property = 7;
+ export const Field = 8;
+ export const Constructor = 9;
+ export const Enum = 10;
+ export const Interface = 11;
+ export const Function = 12;
+ export const Variable = 13;
+ export const Constant = 14;
+ export const String = 15;
+ export const Number = 16;
+ export const Boolean = 17;
+ export const Array = 18;
+ export const Object = 19;
+ export const Key = 20;
+ export const Null = 21;
+ export const EnumMember = 22;
+ export const Struct = 23;
+ export const Event = 24;
+ export const Operator = 25;
+ export const TypeParameter = 26;
+}
+
+/**
+ * Represents programming constructs like variables, classes, interfaces etc. that appear in a document. Document symbols can be
+ * hierarchical and they have two ranges: one that encloses its definition and one that points to its most interesting range,
+ * e.g. the range of an identifier.
+ */
+export class DocumentSymbol {
+
+ /**
+ * The name of this symbol.
+ */
+ name: string;
+
+ /**
+ * More detail for this symbol, e.g the signature of a function. If not provided the
+ * name is used.
+ */
+ detail?: string;
+
+ /**
+ * The kind of this symbol.
+ */
+ kind: SymbolKind;
+
+ /**
+ * Indicates if this symbol is deprecated.
+ */
+ deprecated?: boolean;
+
+ /**
+ * The range enclosing this symbol not including leading/trailing whitespace but everything else
+ * like comments. This information is typically used to determine if the the clients cursor is
+ * inside the symbol to reveal in the symbol in the UI.
+ */
+ range: Range;
+
+ /**
+ * The range that should be selected and revealed when this symbol is being picked, e.g the name of a function.
+ * Must be contained by the the `range`.
+ */
+ selectionRange: Range;
+
+ /**
+ * Children of this symbol, e.g. properties of a class.
+ */
+ children?: DocumentSymbol[];
+}
+
/**
* Represents information about programming constructs like variables, classes,
* interfaces etc.
@@ -3112,37 +3191,6 @@ interface SymbolInformation {
containerName?: string;
}
-/**
- * A symbol kind.
- */
-export namespace SymbolKind {
- export const File = 1;
- export const Module = 2;
- export const Namespace = 3;
- export const Package = 4;
- export const Class = 5;
- export const Method = 6;
- export const Property = 7;
- export const Field = 8;
- export const Constructor = 9;
- export const Enum = 10;
- export const Interface = 11;
- export const Function = 12;
- export const Variable = 13;
- export const Constant = 14;
- export const String = 15;
- export const Number = 16;
- export const Boolean = 17;
- export const Array = 18;
- export const Object = 19;
- export const Key = 20;
- export const Null = 21;
- export const EnumMember = 22;
- export const Struct = 23;
- export const Event = 24;
- export const Operator = 25;
- export const TypeParameter = 26;
-}
```
* error: code and message set in case an exception happens during the document symbol request.
@@ -3761,6 +3809,10 @@ _Registration Options_: `TextDocumentRegistrationOptions`
### Change Log
+#### 3.10.0 (7/23/2018)
+
+* Add support for hierarchical document symbols as a valid reponse to a `textDocument/documentSymbol` request.
+
#### 3.9.0 (7/10/2018)
* Add support for `preselect` property in `CompletionItem`