Option to collect identifiers n comments/strings

Fixes #98.
This commit is contained in:
Strahinja Val Markovic 2013-02-16 14:00:46 -08:00
parent 7833cc1cf1
commit e743076e14
7 changed files with 43 additions and 16 deletions

View File

@ -532,6 +532,16 @@ Default: `0`
let g:ycm_complete_in_comments_and_strings = 0 let g:ycm_complete_in_comments_and_strings = 0
### The `g:ycm_collect_identifiers_from_comments_and_strings` option
When this option is set to `1`, YCM's identifier completer will also collect
identifiers from strings and comments. Otherwise, the text in comments and
strings will be ignored.
Default: `0`
let g:ycm_collect_identifiers_from_comments_and_strings = 0
### The `g:ycm_add_preview_to_completeopt` option ### The `g:ycm_add_preview_to_completeopt` option
When this option is set to `1`, YCM will add the `preview` string to Vim's When this option is set to `1`, YCM will add the `preview` string to Vim's

View File

@ -137,20 +137,26 @@ void IdentifierCompleter::AddCandidatesToDatabase(
void IdentifierCompleter::AddCandidatesToDatabaseFromBuffer( void IdentifierCompleter::AddCandidatesToDatabaseFromBuffer(
const std::string &buffer_contents, const std::string &buffer_contents,
const std::string &filetype, const std::string &filetype,
const std::string &filepath ) { const std::string &filepath,
bool collect_from_comments_and_strings) {
ClearCandidatesStoredForFile( filetype, filepath ); ClearCandidatesStoredForFile( filetype, filepath );
AddCandidatesToDatabase( std::string new_contents =
ExtractIdentifiersFromText( RemoveIdentifierFreeText( buffer_contents ) ), collect_from_comments_and_strings ?
filetype, buffer_contents :
filepath ); RemoveIdentifierFreeText( buffer_contents );
AddCandidatesToDatabase( ExtractIdentifiersFromText( new_contents ),
filetype,
filepath );
} }
void IdentifierCompleter::AddCandidatesToDatabaseFromBufferAsync( void IdentifierCompleter::AddCandidatesToDatabaseFromBufferAsync(
std::string buffer_contents, std::string buffer_contents,
std::string filetype, std::string filetype,
std::string filepath ) { std::string filepath,
bool collect_from_comments_and_strings ) {
// TODO: throw exception when threading is not enabled and this is called // TODO: throw exception when threading is not enabled and this is called
if ( !threading_enabled_ ) if ( !threading_enabled_ )
return; return;
@ -160,7 +166,8 @@ void IdentifierCompleter::AddCandidatesToDatabaseFromBufferAsync(
boost::ref( *this ), boost::ref( *this ),
boost::move( buffer_contents ), boost::move( buffer_contents ),
boost::move( filetype ), boost::move( filetype ),
boost::move( filepath ) ); boost::move( filepath ),
collect_from_comments_and_strings );
buffer_identifiers_task_stack_.Push( buffer_identifiers_task_stack_.Push(
make_shared< packaged_task< void > >( boost::move( functor ) ) ); make_shared< packaged_task< void > >( boost::move( functor ) ) );

View File

@ -56,9 +56,11 @@ public:
const std::string &filetype, const std::string &filetype,
const std::string &filepath ); const std::string &filepath );
void AddCandidatesToDatabaseFromBuffer( const std::string &buffer_contents, void AddCandidatesToDatabaseFromBuffer(
const std::string &filetype, const std::string &buffer_contents,
const std::string &filepath ); const std::string &filetype,
const std::string &filepath,
bool collect_from_comments_and_strings );
// NOTE: params are taken by value on purpose! With a C++11 compiler we can // NOTE: params are taken by value on purpose! With a C++11 compiler we can
// avoid an expensive copy of buffer_contents if the param is taken by value // avoid an expensive copy of buffer_contents if the param is taken by value
@ -66,7 +68,8 @@ public:
void AddCandidatesToDatabaseFromBufferAsync( void AddCandidatesToDatabaseFromBufferAsync(
std::string buffer_contents, std::string buffer_contents,
std::string filetype, std::string filetype,
std::string filepath ); std::string filepath,
bool collect_from_comments_and_strings );
// Only provided for tests! // Only provided for tests!
std::vector< std::string > CandidatesForQuery( std::vector< std::string > CandidatesForQuery(

View File

@ -45,7 +45,7 @@ int YcmCoreVersion()
{ {
// We increment this every time when we want to force users to recompile // We increment this every time when we want to force users to recompile
// ycm_core. // ycm_core.
return 1; return 2;
} }

View File

@ -77,6 +77,9 @@ let g:ycm_add_preview_to_completeopt =
let g:ycm_complete_in_comments_and_strings = let g:ycm_complete_in_comments_and_strings =
\ get( g:, 'ycm_complete_in_comments_and_strings', 0 ) \ get( g:, 'ycm_complete_in_comments_and_strings', 0 )
let g:ycm_collect_identifiers_from_comments_and_strings =
\ get( g:, 'ycm_collect_identifiers_from_comments_and_strings', 0 )
let g:ycm_autoclose_preview_window_after_completion = let g:ycm_autoclose_preview_window_after_completion =
\ get( g:, 'ycm_autoclose_preview_window_after_completion', 0 ) \ get( g:, 'ycm_autoclose_preview_window_after_completion', 0 )

View File

@ -87,14 +87,18 @@ class IdentifierCompleter( Completer ):
def AddBufferIdentifiers( self ): def AddBufferIdentifiers( self ):
filetype = vim.eval( "&filetype" ) filetype = vim.eval( "&filetype" )
filepath = vim.eval( "expand('%:p')" ) filepath = vim.eval( "expand('%:p')" )
collect_from_comments_and_strings = bool( int( vimsupport.GetVariableValue(
"g:ycm_collect_identifiers_from_comments_and_strings" ) ) )
if not filetype or not filepath: if not filetype or not filepath:
return return
text = "\n".join( vim.current.buffer ) text = "\n".join( vim.current.buffer )
self.completer.AddCandidatesToDatabaseFromBufferAsync( text, self.completer.AddCandidatesToDatabaseFromBufferAsync(
filetype, text,
filepath ) filetype,
filepath,
collect_from_comments_and_strings )
def OnFileReadyToParse( self ): def OnFileReadyToParse( self ):

View File

@ -238,7 +238,7 @@ def CurrentIdentifierFinished():
return line[ : current_column ].isspace() return line[ : current_column ].isspace()
COMPATIBLE_WITH_CORE_VERSION = 1 COMPATIBLE_WITH_CORE_VERSION = 2
def CompatibleWithYcmCore(): def CompatibleWithYcmCore():
try: try: