ccls

C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting

APACHE-2.0 License

Downloads
678
Stars
3.7K
Committers
64

Bot releases are visible (Hide)

ccls - 0.20240202 Latest Release

Published by MaskRay 6 months ago

ccls - 0.20230717

Published by MaskRay 6 months ago

ccls - 0.20220729

Published by MaskRay about 2 years ago

ccls - 0.20210330

Published by MaskRay over 3 years ago

Fix short_name_size when getNameAsString does not return a prefix (#784)

ccls - 20201219

Published by MaskRay almost 4 years ago

This release supports Clang 7~11.

LSP

  • Support 3.15.0 serverInfo
  • Report index status via $/progress (WorkDoneProgressBegin/WorkDoneProgressReport/WorkDoneProgressEnd)

Project

  • Better recursive .ccls files

Misc

  • New initialization option completion.placeholder: change client.snippetSupport: false to drop ( and < #412
  • Infer -target and --driver-mode from argv[0] #511
  • Support CMake variable CLANG_LINK_CLANG_DYLIB (some distributions use this to provide libclang-cpp.so instead of libclang*.a or libclang*.so. This option is needed to link against libclang-cpp.so)
  • textDocument/documentSymbol: support unopened files #548
  • Disable PCH reading (the Clang library ccls links against may be different from the compiler. The compiler generated PCH files may cause ccls to error due to mismatching PCH versions)
  • indexer: log the number of errors and the first diagnostic
  • indexer: set the kind of static data members to Field instead of Var #593
  • Support workspace as a symlink and symlinks with workspace #639
ccls - 20190823

Published by MaskRay over 4 years ago

This release supports Clang 7~10.

LSP conformance

  • Support null as initializationOptions
  • Set declarationProvider in server capabilities. Some client may need this capability to enable textDocument/declaration
  • Support non-numeric request ID #437

Misc

  • Fix a double-free of llvm::MemoryBuffer when parsing fails #350
  • Keep comments from system headers and improve textDocument/hover #373
  • Fix the conformance issue that VersionedTextDocumentIdentifier.version was omitted. If one renames something spanning more than one document and some documents are not opened, the client may not apply the textDocument/rename change. #387
  • Some macro diagnostics were lost because Note::concerned was not propagated to Diag::concerned #391
  • index.onChange: true support non-existent files #443
  • textDocument/definition: don't jump to the type definition
  • Disable warnings and skip processed function bodies. This should provide massive performance improvement when indexing a project. I measured 2x improvement indexing ccls with 2 threads, more than 2x indexing llvm/clang/extra/lld/compiler-rt with 6 threads.

Project

  • Fix some issues with hierarchical .ccls in #384
  • .ccls: support CUDA files with the %cu directive
  • compilationDatabaseDirectory can be absolute. #466
  • Improve heuristics for files not described by compile_commands.json "... but not so well for projects with separate include and source directories, e.g. "inc/long/path/to/my_file.h" and "src/long/path/to/my_file.cc" #441

Windows

  • A Visual Studio 2017 STL bug prevented clang-cl from compiling ccls/src/utils.hh #371 #414
  • If the file is re-saved before the previous indexing has complete, various ambiguous errors might occur. Fixing this by making opened files volatile #235 #453

Extension requests

  • $ccls/fileInfo: can optionally dump dependencies, includes and skipped_ranges

Patches

  • 0.20190823.3 incorrect use of clang::FileEntry::getName on Arch Linux #487
ccls - Pi Day

Published by MaskRay over 4 years ago

0.20190823.6 is newer than this one!

Building ccls requires at least clang 7. Support for Clang 6 was dropped. This release supports Clang 7, 8 and 9.

-DSYSTEM_CLANG=on should not be used. clang/llvm auto-download mechanism was deleted.

-DUSE_SYSTEM_RAPIDJSON=on is the default: use system rapidjson (instead of git submodule) if available.

-DLLVM_ENABLE_RTTI= and -DUSE_SHARED_LLVM= should not be used. Since #313, LLVMConfig.cmake ClangConfig.cmake are consulted to set sane values for the two variables.

Customization

  • New initialization option index.maxInitializerLines. Made some
    ServerCapabilities toggable.
  • Initialization option cacheDirectory was renamed to cache.directory #278
  • New initialization option cache.hierarchicalPath to work around NAME_MAX
    limitation: store cache files as $directory/a/b/c.cc.blob instead of
    $directory/a@[email protected] #278
  • New initialization option cache.retainInMemory: 2: change to 1 to avoid cache corruption if
    the index file is changed after the initial load, which may happen if several
    language clients open the same project and share the same cache directory #278
  • -log-file=stderr is the default #219
  • Initialization option `compilationDatabaseCommand** works on Windows #220

Completion

  • Enable documentation for signatureHelp
  • Workaround for VSCode completion result sorting #210
  • Rebuild preamble if its size changes #190

Index

  • Support some unhandled Decl::Kind
  • Index TemplateTypeParmDecl and ParmVarDecl in declarations for clang >= 9
  • Line numbers can be 0~65535 (was: 0~32767)
  • Support multi-byte UTF-8 characters #268
  • Decreased memory usage: "Change containers of Query*::Def fields from std::vector to ccls::Vec"
  • New initialization option index.initialNoLinkage: false: by default, the background indexer doesn't handle names of no linkage. This saves a lot of memory.

Others

  • Make textDocument/hover more detailed: When hovering on a class, ccls tries hard to get the definition and displays struct D : B {}. It may display a forward declaration struct D before.
  • Normalize end-of-line sequences #293
  • Log {Request,Notification}Message, and timestamp change due to dependency
  • textDocument/rename: mitigate edits in the same place and edits in macro replacement #296
  • Use DiagnosticRelatedInformation in clients that support it #276
  • In textDocument/documentSymbol, override declaration's range/selectionRange with definition's #309
  • Better support when the workspace folder is a symlink #314
ccls - 0x100

Published by MaskRay almost 5 years ago

Lots of improvement

Hierarchies have been renamed to:
$ccls/call $ccls/member $ccls/inheritance
and are available for flattened view (read custom cross references sections on wiki/LanguageClient-neovim and wiki/Emacs)

Completion and diagnostics have been refactored from libclang to Clang C++.

New $ccls/navigate for semantic navigation

Experimental index.onChange: true, index.multiVersion: true and cacheDirectory: ""
https://github.com/MaskRay/ccls/wiki/Initialization-options

ccls - Maker Faire

Published by MaskRay almost 5 years ago

ccls - 1024

Published by MaskRay almost 6 years ago

Requests

  • textDocument/documentLink #include are represented as hyperlinks in vscode
  • textDocument/foldingRange
  • $ccls/setSkippedRanges -> $ccls/publishSkippedRanges
  • $ccls/publishSemanticHighlighting -> $ccls/publishSemanticHighlight
  • Uniquify textDocument/typeDefinition result

Message handling has been refactored.

Others

  • Support *.cu CUDA files
  • -DSYSTEM_CLANG=off (default) downloads Clang 7.0.0 prebuilt archives from <releases.llvm.org> now (6.0.1 before)
  • Add ExtentRef; merge symbol2refcnt and outline2refcnt
  • New command line option. ccls -index ~/llvm => index ~/llvm without starting the language server
ccls - 1010

Published by MaskRay almost 6 years ago

New methods

  • textDocument/{formatting,onTypeFormatting,rangeFormatting} formatting/rangeFormatting can be used as replacement of the command line utility clang-format
  • $ccls/info: server status

Completion

  • With clang>=7, completion items can replace . with -> or replace -> with . The client-side support of additionalTextEdits is required.
  • preamble stat cache
  • Some undesired candidates are blacklisted (e.g. destructors, injected class names)

Others

  • Fixed hierarchical document symbol
  • Redesigned index: SymbolRef, Ref, Use, DeclRef. Decreased memory usage.
  • Fixed some issues applying $ccls/member on namespaces. anonymous namespaces/extern "C" are skipped, etc
  • Experimental workspace folders
  • Increased stack size
  • Revamped codeLens & codeAction
ccls - Christmas

Published by MaskRay almost 6 years ago

  • workspace/didChangeWatchedFiles works (tested on VSCode and coc.nvim) and file deletion will remove index symbols
  • .ccls enhancement #171 added new directives %compile_commands.json %h %hpp %objective-c %objective-cpp
  • -v=1 dumps command line options of files for parsing
  • fuzzy_match: when the completion filter begins with a letter, builtin macros prefixed with an underscore will not be returned
  • Support textDocument/declaration and LocationLink[] return types.
  • Properly handle "exit" #159
  • Support signatureHelp.signatureInformationparameterInformation.labelOffsetSupport cf. https://github.com/Microsoft/language-server-protocol/issues/640
  • codeAction: fixed an incompatibility issue with VSCode

Completion

  • More precise diagnostics/completion: an included file that has been changed does not need to be saved to take effect.
  • Decreased Content-Length: from 32K to 25K for some cases
  • On clang < 8, fixed #include < completion for -I dir
  • Macros are categorized as Text, instead of Interface
  • Refactor and rename (clang_complete.cc -> sema_manager.cc)
  • C++17 deduction guide #173

Others

  • Support multiple -init=: "initializationOptions" from client are applied first, then -init=. Scalar options will be overridden while arrays will get concatenated

Patch versions

  • 0.20181225.2 #182 textDocument/codeAction used incorrect range intersection
  • 0.20181225.3 #187 the new feature %h %hpp didn't take effect
  • 0.20181225.4 #197 keys in file->symbol2refcnt could be modified in message_handler.cc. Affected old releases. Tagged 0.20181010.1 0.20181024.1 0.20181111.2 0.20181225.4, respectively.
  • 0.20181225.6 make project.cc:GetSearchDirs recognize clang.extraArgs ; on Windows, normalize the drive letter used in g_config->cacheDirectory
  • 0.20181225.7 make workspace/didChangeWatchedFiles conservative https://github.com/MaskRay/ccls/issues/184#issuecomment-455095089
  • 0.20181225.8 bugfix: when neither .ccls nor compile_commands.json is specified, textDocument/didSave did not trigger re-index. The fix for the old issue (a plethora of "not indexed" errors) didn't take effect
  • 0.20181225.9 #316 bugfix: indexer.cc shouldn't use std::shared_lock to guard root2folder being concurrently written.
ccls - 1111

Published by MaskRay almost 6 years ago

  • Switched to Clang's native #include completion if clang >= 8. include_completion.cc is kept for clang<8

  • Refactored message handlers, deleted related static constructors and removed many ls prefixes from class/struct names.

  • textDocument/references and workspace/symbol get a new parameter vector<string> folders; to return results confined in specified folders.

  • hierarchical textDocument/documentSymbol lists member functions without definitions.

  • Fixed EnumConstantDecl's kind & EnumDecl's vars. $ccls/member on scoped enumerations lists its enumeration constants.

  • Fixed/worked around some preamble bugs

  • Fixed MSVC 2017 compatibility issues

  • tobik added a FreeBSD port

Success stories with ClickHouse, Linux, and v8

ccls - DEFCON 26 CTF

Published by MaskRay about 6 years ago

ccls - Real World CTF

Published by MaskRay about 6 years ago

Nothing makes me feel more heartbroken: you solved ccls-fringe and left, with the # of its stargazers unchanged.

ccls - Congratulations to Tea Deliverers

Published by MaskRay over 6 years ago

emacs-ccls is available at https://melpa.org/#/ccls
Arch Linux users may install aur/ccls-git archlinuxcn/ccls-git

Package Rankings
Top 6.41% on Alpine-edge
Top 8.3% on Alpine-v3.15
Top 8.77% on Alpine-v3.16
Top 2.54% on Alpine-v3.18
Top 9.08% on Alpine-v3.17
Top 16.88% on Spack.io
Top 12.9% on Formulae.brew.sh
Badges
Extracted from project README
Telegram Gitter