Split the CompletionData constructor into 2 funcs
This commit is contained in:
parent
6216eedbc9
commit
ddca4d0cf9
@ -16,7 +16,6 @@
|
||||
// along with YouCompleteMe. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "CompletionData.h"
|
||||
#include "standard.h"
|
||||
|
||||
#include <boost/algorithm/string/erase.hpp>
|
||||
|
||||
@ -81,7 +80,8 @@ bool IsMainCompletionTextInfo( CXCompletionChunkKind kind )
|
||||
}
|
||||
|
||||
|
||||
std::string ChunkToString( CXCompletionString completion_string, int chunk_num )
|
||||
std::string ChunkToString( CXCompletionString completion_string,
|
||||
uint chunk_num )
|
||||
{
|
||||
if ( !completion_string )
|
||||
return std::string();
|
||||
@ -91,7 +91,7 @@ std::string ChunkToString( CXCompletionString completion_string, int chunk_num )
|
||||
|
||||
|
||||
std::string OptionalChunkToString( CXCompletionString completion_string,
|
||||
int chunk_num )
|
||||
uint chunk_num )
|
||||
{
|
||||
std::string final_string;
|
||||
if ( !completion_string )
|
||||
@ -169,48 +169,10 @@ CompletionData::CompletionData( const CXCompletionResult &completion_result )
|
||||
|
||||
for ( uint j = 0; j < num_chunks; ++j )
|
||||
{
|
||||
CXCompletionChunkKind kind = clang_getCompletionChunkKind(
|
||||
completion_string, j );
|
||||
|
||||
if ( IsMainCompletionTextInfo( kind ) )
|
||||
{
|
||||
if ( kind == CXCompletionChunk_LeftParen )
|
||||
{
|
||||
saw_left_paren = true;
|
||||
}
|
||||
|
||||
else if ( saw_left_paren &&
|
||||
!saw_function_params &&
|
||||
kind != CXCompletionChunk_RightParen &&
|
||||
kind != CXCompletionChunk_Informative )
|
||||
{
|
||||
saw_function_params = true;
|
||||
everything_except_return_type_.append( " " );
|
||||
}
|
||||
|
||||
else if ( saw_function_params && kind == CXCompletionChunk_RightParen )
|
||||
{
|
||||
everything_except_return_type_.append( " " );
|
||||
}
|
||||
|
||||
if ( kind == CXCompletionChunk_Optional )
|
||||
{
|
||||
everything_except_return_type_.append(
|
||||
OptionalChunkToString( completion_string, j ) );
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
everything_except_return_type_.append(
|
||||
ChunkToString( completion_string, j ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( kind == CXCompletionChunk_ResultType )
|
||||
return_type_ = ChunkToString( completion_string, j );
|
||||
|
||||
if ( kind == CXCompletionChunk_TypedText )
|
||||
original_string_ = ChunkToString( completion_string, j );
|
||||
ExtractDataFromChunk( completion_string,
|
||||
j,
|
||||
saw_left_paren,
|
||||
saw_function_params );
|
||||
}
|
||||
|
||||
kind_ = CursorKindToVimKind( completion_result.CursorKind );
|
||||
@ -230,4 +192,54 @@ CompletionData::CompletionData( const CXCompletionResult &completion_result )
|
||||
.append( "\n" );
|
||||
}
|
||||
|
||||
|
||||
void CompletionData::ExtractDataFromChunk( CXCompletionString completion_string,
|
||||
uint chunk_num,
|
||||
bool &saw_left_paren,
|
||||
bool &saw_function_params )
|
||||
{
|
||||
CXCompletionChunkKind kind = clang_getCompletionChunkKind(
|
||||
completion_string, chunk_num );
|
||||
|
||||
if ( IsMainCompletionTextInfo( kind ) )
|
||||
{
|
||||
if ( kind == CXCompletionChunk_LeftParen )
|
||||
{
|
||||
saw_left_paren = true;
|
||||
}
|
||||
|
||||
else if ( saw_left_paren &&
|
||||
!saw_function_params &&
|
||||
kind != CXCompletionChunk_RightParen &&
|
||||
kind != CXCompletionChunk_Informative )
|
||||
{
|
||||
saw_function_params = true;
|
||||
everything_except_return_type_.append( " " );
|
||||
}
|
||||
|
||||
else if ( saw_function_params && kind == CXCompletionChunk_RightParen )
|
||||
{
|
||||
everything_except_return_type_.append( " " );
|
||||
}
|
||||
|
||||
if ( kind == CXCompletionChunk_Optional )
|
||||
{
|
||||
everything_except_return_type_.append(
|
||||
OptionalChunkToString( completion_string, chunk_num ) );
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
everything_except_return_type_.append(
|
||||
ChunkToString( completion_string, chunk_num ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( kind == CXCompletionChunk_ResultType )
|
||||
return_type_ = ChunkToString( completion_string, chunk_num );
|
||||
|
||||
if ( kind == CXCompletionChunk_TypedText )
|
||||
original_string_ = ChunkToString( completion_string, chunk_num );
|
||||
}
|
||||
|
||||
} // namespace YouCompleteMe
|
||||
|
@ -18,6 +18,7 @@
|
||||
#ifndef COMPLETIONDATA_H_2JCTF1NU
|
||||
#define COMPLETIONDATA_H_2JCTF1NU
|
||||
|
||||
#include "standard.h"
|
||||
#include <string>
|
||||
#include <clang-c/Index.h>
|
||||
|
||||
@ -106,6 +107,13 @@ struct CompletionData
|
||||
std::string original_string_;
|
||||
|
||||
std::string everything_except_return_type_;
|
||||
|
||||
private:
|
||||
|
||||
void ExtractDataFromChunk( CXCompletionString completion_string,
|
||||
uint chunk_num,
|
||||
bool &saw_left_paren,
|
||||
bool &saw_function_params );
|
||||
};
|
||||
|
||||
} // namespace YouCompleteMe
|
||||
|
Loading…
Reference in New Issue
Block a user