Commit Graph

425 Commits

Author SHA1 Message Date
Fangrui Song
3bf921b3bd Add initialization option capabilities.* and index.maxInitializerLines
indexer.cc: use index.maxInitializerLines instead of kInitializerMaxLines

messages/initialize.cc: some ServerCapabilities are toggable:

documentOnTypeFormattingProvider.firstTriggerCharacter
foldingRangeProvider
workspace.workspaceFolders.supported
2019-02-10 18:17:07 +08:00
Fangrui Song
03f91f0681 Compute CompletionItemKind from Declaration instead of CursorKind 2019-02-02 14:14:23 +08:00
Riatre Foo
cd0f204349 textDocument/signatureHelp: enable documentation 2018-10-14 07:58:08 +08:00
Riatre Foo
84f7d5081f Fix completion result sorting in VSCode (#210)
Fix #207
2019-01-30 23:21:40 +08:00
Fangrui Song
c6d56519e3 Drop support for clang 6 2019-01-21 10:44:44 +08:00
Fangrui Song
f99cf50456 textDocument/didOpen: index related files when a header is opened
Fix #180

index.initialBlacklist: ["."] can inhibit initial indexing (useful for larger code bases).
Opened files are still indexed, though.
This heuristic allows related files (a/foo.c a/b/foo.cc) to be indexed when a header (foo.h) is opened.
2019-11-09 20:09:13 -08:00
Fangrui Song
8835a555f8 Delay requests if the document has not not indexed (#176)
This fixes a plethora of "not indexed" errors when the document has not been indexed.

* Message handler throws NotIndexed if not overdue
* The message is put into backlog and tagged with backlog_path
* path2backlog[path] tracks backlog associated with document `path`
* The backlog is cleared when the index is merged
* backlog[0] is forced to run if it becomes overdue
2019-11-09 20:09:13 -08:00
Fangrui Song
52e0289245 Handle file deletion and register workspace/didChangeWatchedFiles
* In the "initialized" callback, send client/registerCapability with DidChangeWatchedFilesRegistrationOptions
* In workspace/didChangeWatchedFiles callback, call pipeline::Index
* In pipeline::Index, add a `deleted` status
2019-11-09 20:09:13 -08:00
Fangrui Song
ab48179946 Make cacheDirectory related to project root; delete Timer 2019-11-09 20:09:13 -08:00
Fangrui Song
45ac75fce3 completion: ignore CXXDeductionGuide
Fix #173
2019-11-09 20:09:13 -08:00
Fangrui Song
c085e07b19 Extend .ccls
* Add %h for C header files (the suffix .h is considered a C header, not a C++ header)
* Add %hpp for C++ header files
* If .ccls exists, it provides full command line for files not specified by compile_commands.json (before, compile_commands.json was ignored)
* If the first line of .ccls is %compile_commands.json, it appends flags to compile_commands.json "arguments", instead of overriding.
  Files not specified by compile_commands.json will not be added to folder.entries, but their command line can be inferred from other files.

Also fix `#include <` completion of -I flags for clang < 8
2019-11-09 20:09:13 -08:00
Fangrui Song
6e8a45b25e Add strict to FuzzyMatcher::Match
In completion, underscore prefixed builtin macros may be annoying when the first type character is not an underscore.

When `strict` is true, `Match` enforces the first characters should be loosely of the same category.
2019-11-09 20:09:13 -08:00
Fangrui Song
836caba19b ParameterInformation: use label: [number, number]
Don't bother checking signatureHelp.signatureInformationparameterInformation.labelOffsetSupport
2019-11-09 20:09:13 -08:00
Fangrui Song
49ae9e8912 Support textDocument/declaration & LocationLink
textDocument/{declaration,definition,typeDefinition} return either LocationLink[] or Location[]
Add an initialization option client.linkSupport . When it is false, ccls will return Location[] disregarding client's linkSupport.
`struct LocationLink` does not include originSelectionRange as it is wasteful.
2019-11-09 20:09:13 -08:00
Fangrui Song
e3133bea90 cmake_minimum_required 3.8; clean up 2019-11-09 20:09:13 -08:00
Fangrui Song
20e0beb9f3 Rendezvous after receiving "exit" notification (#159) 2019-11-09 20:09:13 -08:00
Fangrui Song
c06c2ca324 Support multiple -init=
Initialization options are applied (deserialized to the same object) in the following order:

* "initializationOptions" from client
* first -init=
* second -init=
* ...

Scalar options will be overridden but arrays will get concatenated, e.g.

ccls -log-file=/dev/stderr -index . -init='{"clang":{"extraArgs":["-DA"]}}' -init='{"clang":{"extraArgs":["-DB"]}}'

results in clang.extraArgs: ["-DA", "-DB"]
2019-11-09 20:09:13 -08:00
Fangrui Song
a47fb42e30 Refactor serializer
Delete virtual bases Reader & Writer
Delete unused MAKE_REFLECT_STRUCT_WRITER_AS_ARRAY
Merge serializers/{json,binary}.hh into serializer.{hh,cc}
MAKE_REFLECT_STRUCT => REFLECT_STRUCT
MAKE_REFLECT_TYPE_PROXY => REFLECT_UNDERLYING
2019-11-09 20:09:13 -08:00
Fangrui Song
a599aef482 Add ReplyOnce::NotReady and error if didOpen is not seen
Use IgnoringDiagConsumer to override default TextDiagnosticPrinter
2019-11-09 20:09:13 -08:00
Fangrui Song
9ad2450009 Refactor WorkingFiles and CompletionManager
* WorkingFiles::files : vector -> unordered_map
* Add timestamp to WorkingFile

* Rename "comp-preload" thread to "preamble"
* Rename CompletionManager to SemaManager as it is used by "diag" "comp" "preamble"
* Rename clang_complete.* to sema_manager.*
* Merge SemaManager::{preloads,sessions}
* Add initialization option session.maxNum
* In DiagnosticMain, if an included file was modified, cancel the DiagTask and create a PreambleTask instead. The task sets `from_diag` so as to trigger immediate DiagTask after the preamble is built.
2019-11-09 20:09:13 -08:00
Fangrui Song
b9369e055a completion: use Text for Macro{Instantiation,Definition} 2019-11-09 20:09:13 -08:00
Fangrui Song
880c515d64 Merge query.hh and query_util.hh 2019-11-09 20:09:13 -08:00
Fangrui Song
d6dd932e6d Refactor Matcher to use pimpl and merge match.hh into utils.hh 2019-11-09 20:09:13 -08:00
Fangrui Song
7f8f68c0b2 codeAction: use codeActionProvider: CodeActionOptions and respect CodeActionParams::range 2019-11-09 20:09:13 -08:00
Fangrui Song
19d38bc1d2 Make DocumentLink::range narrower
Thanks to Riatre #135
2019-11-09 20:09:13 -08:00
Fangrui Song
0f0c328a91 completion: delete insertText; don't set filterText if it is the same as label
It decreases Content-Length: from 32K to 25K for the following case:

 #include <bits/stdc++.h>
int main() { std::| }

Also

* make results deterministic when completion text is empty
* sort by newText, label, filterText
2019-11-09 20:09:13 -08:00
Fangrui Song
98be09cc2e serializer: make visitor/vis value/v consistent 2019-11-09 20:09:13 -08:00
Fangrui Song
741d8f2130 Refactor ReplyOnce; error if InitializeParams.rootUri is null 2019-11-09 20:09:13 -08:00
Fangrui Song
95bba3ed15 hierarchicalDocumentSymbol: support SymbolKind::Function declaration and uniquify by range
Also ensure selectionRange is a subrange of range, otherwise VSCode won't show the item.
Use detailed_name for 'detail'
2019-11-09 20:09:13 -08:00
Fangrui Song
d9a31a72bd hierarchicalDocumentSymbol: display member function declarations 2019-11-09 20:09:13 -08:00
Fangrui Song
d398e071dc If clang >= 8, delete search path detection and use Sema::CodeCompleteIncludedFile 2019-11-09 20:09:13 -08:00
Fangrui Song
444f0db1f2 Work around relative --sysroot= 2019-11-09 20:09:13 -08:00
Fangrui Song
09669fff76 Reduce MAKE_REFLECT_STRUCT in lsp.hh
Position -> Pos; lsPosition -> Position
2019-11-09 20:09:13 -08:00
Fangrui Song
0d4f4b68c0 Remove ls prefix from many LSP interfaces
Rename SymbolKind to Kind & lsSymbolKind to SymbolKind
Use textDocumentSync: TextDocumentSyncOptions
2019-11-09 20:09:13 -08:00
Fangrui Song
353b398a73 Simplify and work around vscode _sortTextLow 2019-11-09 20:09:13 -08:00
Fangrui Song
c8e57ee7b3 textDocument/references workspace/symbol: add folders
For textDocument/reference, base/excludeRole/role has been lifted from params.context.* to params.*
2019-11-09 20:09:13 -08:00
Fangrui Song
c1422c7a8d Simplify and better compatibility with encodings retaining the feature of low bytes being 1-byte characters 2019-11-09 20:09:13 -08:00
Fangrui Song
bbce333042 *.h -> *.hh 2019-11-09 20:09:13 -08:00
Fangrui Song
3cd0ee2fc7 Refactor message handler and namespace ccls 2019-11-09 20:09:11 -08:00
Fangrui Song
8fa853c321 Implement textDocument/documentLink 2019-11-09 20:03:28 -08:00
Fangrui Song
617cdd89de Implement textDocument/foldingRange 2019-11-09 20:03:28 -08:00
Fangrui Song
4f8889c195 Deprioritize completion items with additionTextEdits 2019-11-09 20:03:28 -08:00
Fangrui Song
dc20ea3b33 Fix textDocument/implementation 2019-11-09 20:03:28 -08:00
Fangrui Song
66bf514b5f Add command line option -index=root to index without starting language server 2019-11-09 20:03:28 -08:00
Fangrui Song
18b47d3f5c Improve extent of definition/declaration; uniquify typeDefinition 2019-11-09 20:03:28 -08:00
Fangrui Song
46cfd5504a Simplify 2019-11-09 20:03:28 -08:00
Fangrui Song
5fbe4eac83 Add ExtentRef; merge symbol2refcnt and outline2refcnt
Fix hierarchical document symbol for namespaces when there are multiple declarations.
2019-11-09 20:03:28 -08:00
Fangrui Song
bc4dc6720b Add pipeline::{Notify,Reply,ReplyError} and simplify message handling
Delete method.{cc,h}
Rename $ccls/setSkippedRanges to $ccls/publishSkippedRanges
Rename $ccls/publishSemanticHighlighting to $ccls/publishSemanticHighlight; stableId -> id
2019-11-09 20:03:28 -08:00
Fangrui Song
4a1eea75db Misc changes to project
* Better LanguageId detection with clangDriver (e.g. .cu -> types::TY_CUDA)
* fallback when there is no .ccls or compile_commands.json

Also Hide clangTooling options from --help
2019-11-09 20:03:28 -08:00
Riatre Foo
ec71d4c6c0 Fix hierarchical document symbol
1. Fixed a bug on building document symbol tree: As sym2ds was updated in
place, nested funcs/types may be moved into children of another
lsDocumentSymbol before itself got processed.

2. Namespaces only have declarations, in the old implementation it wasn't included in the result, making the result less hierarchical. This
commit fixes this by including the declarations of a symbol if no
definitions found.
2019-11-09 20:03:28 -08:00