mirror of
https://github.com/Ed94/refactor.git
synced 2025-07-08 22:55:47 -07:00
WIP - Got it somewhat working, still have issues with multiple files.
This commit is contained in:
@ -1,5 +1,4 @@
|
||||
#define BLOAT_IMPL
|
||||
#include "bloat.hpp"
|
||||
#include "Bloat.cpp"
|
||||
#include "IO.cpp"
|
||||
#include "Spec.cpp"
|
||||
|
||||
@ -16,7 +15,7 @@ void parse_options( int num, char** arguments )
|
||||
zpl_opts_add( & opts, "dst" , "dst" , "File/s post refactor" , ZPL_OPTS_STRING);
|
||||
zpl_opts_add( & opts, "spec", "spec", "Specification for refactoring", ZPL_OPTS_STRING);
|
||||
|
||||
if (zpl_opts_compile( & opts, num, arguments))
|
||||
if (opts_custom_compile( & opts, num, arguments))
|
||||
{
|
||||
sw num = 0;
|
||||
|
||||
@ -36,7 +35,12 @@ void parse_options( int num, char** arguments )
|
||||
else
|
||||
{
|
||||
num = 1;
|
||||
|
||||
zpl_array_init_reserve( IO::Sources, g_allocator, 1 );
|
||||
zpl_array_init_reserve( IO::Destinations, g_allocator, 1 );
|
||||
}
|
||||
|
||||
zpl_printf("NUM IS: %d", num);
|
||||
|
||||
if ( zpl_opts_has_arg( & opts, "src" ) )
|
||||
{
|
||||
@ -44,7 +48,8 @@ void parse_options( int num, char** arguments )
|
||||
|
||||
if ( num == 1 )
|
||||
{
|
||||
IO::Sources[0] = zpl_string_make_length( g_allocator, opt, zpl_string_length( opt) );
|
||||
zpl_string path = zpl_string_make_length( g_allocator, opt, zpl_string_length( opt ));
|
||||
zpl_array_append( IO::Sources, path );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -60,9 +65,10 @@ void parse_options( int num, char** arguments )
|
||||
{
|
||||
path[length] = *opt;
|
||||
}
|
||||
while ( length++, opt++, *opt != ' ' );
|
||||
while ( length++, opt++, *opt != ' ' && *opt != '\0' );
|
||||
|
||||
IO::Sources[num - left] = zpl_string_make_length( g_allocator, path, length );
|
||||
zpl_string path_string = zpl_string_make_length( g_allocator, path, length );
|
||||
zpl_array_append( IO::Sources, path_string );
|
||||
|
||||
opt++;
|
||||
}
|
||||
@ -71,7 +77,7 @@ void parse_options( int num, char** arguments )
|
||||
}
|
||||
else
|
||||
{
|
||||
fatal( "-source not provided\n" );
|
||||
fatal( "-src not provided\n" );
|
||||
}
|
||||
|
||||
if ( zpl_opts_has_arg( & opts, "dst" ) )
|
||||
@ -80,7 +86,8 @@ void parse_options( int num, char** arguments )
|
||||
|
||||
if ( num == 1 )
|
||||
{
|
||||
IO::Destinations[0] = zpl_string_make_length( g_allocator, opt, zpl_string_length( opt) );
|
||||
zpl_string path = zpl_string_make_length( g_allocator, opt, zpl_string_length( opt) );
|
||||
zpl_array_append( IO::Destinations, path );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -96,15 +103,30 @@ void parse_options( int num, char** arguments )
|
||||
{
|
||||
path[length] = *opt;
|
||||
}
|
||||
while ( length++, opt++, *opt != ' ' );
|
||||
while ( length++, opt++, *opt != ' ' && *opt != '\0' );
|
||||
|
||||
IO::Destinations[num - left] = zpl_string_make_length( g_allocator, path, length );
|
||||
zpl_string path_string = zpl_string_make_length( g_allocator, path, length );
|
||||
zpl_array_append( IO::Destinations, path_string );
|
||||
|
||||
opt++;
|
||||
}
|
||||
while ( --left );
|
||||
|
||||
if ( zpl_array_count(IO::Destinations) != zpl_array_count( IO::Sources ) )
|
||||
{
|
||||
fatal("-dst count must match -src count");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uw left = num;
|
||||
do
|
||||
{
|
||||
zpl_array_append( IO::Destinations, IO::Sources[num - left] );
|
||||
}
|
||||
while ( --left );
|
||||
}
|
||||
|
||||
if ( zpl_opts_has_arg( & opts, "spec" ) )
|
||||
{
|
||||
@ -113,9 +135,18 @@ void parse_options( int num, char** arguments )
|
||||
IO::Specification = zpl_string_make( g_allocator, "" );
|
||||
IO::Specification = zpl_string_append( IO::Specification, opt );
|
||||
}
|
||||
else
|
||||
{
|
||||
fatal( "-spec not provided\n" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
zpl_printf("\nArguments: ");
|
||||
for ( int index = 0; index < num; index++)
|
||||
{
|
||||
zpl_printf("\nArg[%d]: %s", index, arguments[index]);
|
||||
}
|
||||
fatal( "Failed to parse arguments\n" );
|
||||
}
|
||||
|
||||
@ -127,7 +158,7 @@ zpl_arena Refactor_Buffer;
|
||||
|
||||
void refactor()
|
||||
{
|
||||
ct char const* include_sig = "#include \"";
|
||||
ct static char const* include_sig = "#include \"";
|
||||
|
||||
struct Token
|
||||
{
|
||||
@ -157,61 +188,62 @@ void refactor()
|
||||
}
|
||||
|
||||
// Prepare data and trackers.
|
||||
Array_Line src = IO::get_next_source();
|
||||
Array_Line lines = src;
|
||||
char const* src = IO::get_next_source();
|
||||
|
||||
if ( src == nullptr )
|
||||
return;
|
||||
|
||||
const sw num_lines = zpl_array_count( lines);
|
||||
log_fmt("\n\nRefactoring: %s", IO::Sources[IO::Current]);
|
||||
|
||||
sw buffer_size = IO::Current_Size;
|
||||
|
||||
sw left = num_lines;
|
||||
Line line = *lines;
|
||||
uw pos = 0;
|
||||
sw left = buffer_size;
|
||||
uw col = 0;
|
||||
uw line = 0;
|
||||
|
||||
#define pos (IO::Current_Size - left)
|
||||
|
||||
#define move_forward( Amount_ ) \
|
||||
left -= Amount_; \
|
||||
col += Amount_; \
|
||||
src += Amount_ \
|
||||
|
||||
do
|
||||
{
|
||||
Continue_Line:
|
||||
|
||||
// Includes to ignore
|
||||
{
|
||||
Spec::Entry* ignore = Spec::Ignore_Words;
|
||||
sw ignores_left = zpl_array_count( Spec::Ignore_Words);
|
||||
Spec::Entry* ignore = Spec::Ignore_Includes;
|
||||
sw ignores_left = zpl_array_count( Spec::Ignore_Includes);
|
||||
|
||||
do
|
||||
for ( ; ignores_left; ignores_left--, ignore++ )
|
||||
{
|
||||
if ( include_sig[0] != line[0] )
|
||||
if ( include_sig[0] != src[0] )
|
||||
continue;
|
||||
|
||||
u32 sig_length = zpl_string_length( ignore->Sig );
|
||||
|
||||
current = zpl_string_set( current, include_sig );
|
||||
current = zpl_string_append_length( current, line, sig_length );
|
||||
current = zpl_string_append_length( current, "\"", 2 );
|
||||
current = zpl_string_append_length( current, src, sig_length );
|
||||
current = zpl_string_append_length( current, "\"", 1 );
|
||||
// Formats current into: #include "<ignore->Sig>"
|
||||
|
||||
if ( zpl_string_are_equal( ignore->Sig, current ) )
|
||||
{
|
||||
log_fmt("\nIgnored %-81s line %d", current, num_lines - left );
|
||||
log_fmt("\nIgnored %-81s line %d, col %d", current, line, col );
|
||||
|
||||
const sw length = zpl_string_length( current );
|
||||
|
||||
line += length;
|
||||
pos += length;
|
||||
move_forward( length );
|
||||
|
||||
// Force end of line.
|
||||
while ( line != '\0' )
|
||||
while ( src[0] != '\n' )
|
||||
{
|
||||
line++;
|
||||
pos++;
|
||||
move_forward( 1 );
|
||||
}
|
||||
|
||||
goto Skip;
|
||||
}
|
||||
}
|
||||
while ( ignore++, --ignores_left );
|
||||
}
|
||||
|
||||
// Word Ignores
|
||||
@ -219,20 +251,20 @@ void refactor()
|
||||
Spec::Entry* ignore = Spec::Ignore_Words;
|
||||
sw ignores_left = zpl_array_count( Spec::Ignore_Words);
|
||||
|
||||
do
|
||||
for ( ; ignores_left; ignores_left--, ignore++ )
|
||||
{
|
||||
if ( ignore->Sig[0] != line[0] )
|
||||
if ( ignore->Sig[0] != src[0] )
|
||||
continue;
|
||||
|
||||
zpl_string_clear( current );
|
||||
|
||||
u32 sig_length = zpl_string_length( ignore->Sig );
|
||||
current = zpl_string_append_length( current, line, sig_length );
|
||||
current = zpl_string_append_length( current, src, sig_length );
|
||||
|
||||
if ( zpl_string_are_equal( ignore->Sig, current ) )
|
||||
{
|
||||
char before = line[-1];
|
||||
char after = line[sig_length];
|
||||
char before = src[-1];
|
||||
char after = src[sig_length];
|
||||
|
||||
if ( zpl_char_is_alphanumeric( before ) || before == '_'
|
||||
|| zpl_char_is_alphanumeric( after ) || after == '_' )
|
||||
@ -240,14 +272,12 @@ void refactor()
|
||||
continue;
|
||||
}
|
||||
|
||||
log_fmt("\nIgnored %-81s line %d", current, num_lines - left );
|
||||
log_fmt("\nIgnored %-81s line %d, col %d", current, line, col );
|
||||
|
||||
line += sig_length;
|
||||
pos += sig_length;
|
||||
move_forward( sig_length );
|
||||
goto Skip;
|
||||
}
|
||||
}
|
||||
while ( ignore++, --ignores_left );
|
||||
}
|
||||
|
||||
// Namespace Ignores
|
||||
@ -255,20 +285,23 @@ void refactor()
|
||||
Spec::Entry* ignore = Spec::Ignore_Namespaces;
|
||||
sw ignores_left = zpl_array_count( Spec::Ignore_Namespaces);
|
||||
|
||||
do
|
||||
for ( ; ignores_left; ignores_left--, ignore++ )
|
||||
{
|
||||
if ( ignore->Sig[0] != line[0] )
|
||||
if ( ignore->Sig[0] != src[0] )
|
||||
{
|
||||
ignore++;
|
||||
continue;
|
||||
}
|
||||
|
||||
zpl_string_clear( current );
|
||||
|
||||
u32 sig_length = zpl_string_length( ignore->Sig );
|
||||
current = zpl_string_append_length( current, line, sig_length );
|
||||
current = zpl_string_append_length( current, src, sig_length );
|
||||
|
||||
if ( zpl_string_are_equal( ignore->Sig, current ) )
|
||||
{
|
||||
u32 length = sig_length;
|
||||
char* ns_content = line + sig_length;
|
||||
u32 length = sig_length;
|
||||
char const* ns_content = src + sig_length;
|
||||
|
||||
while ( zpl_char_is_alphanumeric( ns_content[0] ) || ns_content[0] == '_' )
|
||||
{
|
||||
@ -278,16 +311,14 @@ void refactor()
|
||||
|
||||
#if Build_Debug
|
||||
zpl_string_clear( preview );
|
||||
preview = zpl_string_append_length( preview, line, length );
|
||||
log_fmt("\nIgnored %-40s %-40s line %d", preview, ignore->Sig, - left);
|
||||
preview = zpl_string_append_length( preview, src, length );
|
||||
log_fmt("\nIgnored %-40s %-40s line %d, column %d", preview, ignore->Sig, line, col );
|
||||
#endif
|
||||
|
||||
line += length;
|
||||
pos += length;
|
||||
move_forward( length );
|
||||
goto Skip;
|
||||
}
|
||||
}
|
||||
while ( ignore++, --ignores_left );
|
||||
}
|
||||
|
||||
// Includes to match
|
||||
@ -296,16 +327,16 @@ void refactor()
|
||||
|
||||
sw includes_left = zpl_array_count ( Spec::Includes);
|
||||
|
||||
do
|
||||
for ( ; includes_left; includes_left--, include++ )
|
||||
{
|
||||
if ( include_sig[0] != line[0] )
|
||||
if ( include_sig[0] != src[0] )
|
||||
continue;
|
||||
|
||||
u32 sig_length = zpl_string_length( include->Sig );
|
||||
|
||||
current = zpl_string_set( current, include_sig );
|
||||
current = zpl_string_append_length( current, line, sig_length );
|
||||
current = zpl_string_append_length( current, "\"", 2 );
|
||||
current = zpl_string_append_length( current, src, sig_length );
|
||||
current = zpl_string_append_length( current, "\"", 1 );
|
||||
// Formats current into: #include "<ignore->Sig>"
|
||||
|
||||
if ( zpl_string_are_equal( include->Sig, current ) )
|
||||
@ -326,22 +357,19 @@ void refactor()
|
||||
|
||||
zpl_array_append( tokens, entry );
|
||||
|
||||
log_fmt("\nFound %-81s line %d", current, num_lines - left);
|
||||
log_fmt("\nFound %-81s line %d, column %d", current, line, col );
|
||||
|
||||
line += length;
|
||||
pos += length;
|
||||
move_forward( length );
|
||||
|
||||
// Force end of line.
|
||||
while ( line != '\0' )
|
||||
while ( src[0] != '\0' )
|
||||
{
|
||||
line++;
|
||||
pos++;
|
||||
move_forward( 1 );
|
||||
}
|
||||
|
||||
goto Skip;
|
||||
}
|
||||
}
|
||||
while ( include++, --includes_left );
|
||||
}
|
||||
|
||||
// Words to match
|
||||
@ -349,20 +377,20 @@ void refactor()
|
||||
Spec::Entry* word = Spec::Words;
|
||||
sw words_left = zpl_array_count ( Spec::Words);
|
||||
|
||||
do
|
||||
for ( ; words_left; words_left--, word++ )
|
||||
{
|
||||
if ( word->Sig[0] != line[0] )
|
||||
if ( word->Sig[0] != src[0] )
|
||||
continue;
|
||||
|
||||
zpl_string_clear( current );
|
||||
|
||||
sw sig_length = zpl_string_length( word->Sig);
|
||||
current = zpl_string_append_length( current, line, sig_length );
|
||||
current = zpl_string_append_length( current, src, sig_length );
|
||||
|
||||
if ( zpl_string_are_equal( word->Sig, current ) )
|
||||
{
|
||||
char before = line[-1];
|
||||
char after = line[sig_length];
|
||||
char before = src[-1];
|
||||
char after = src[sig_length];
|
||||
|
||||
if ( zpl_char_is_alphanumeric( before ) || before == '_'
|
||||
|| zpl_char_is_alphanumeric( after ) || after == '_' )
|
||||
@ -384,14 +412,12 @@ void refactor()
|
||||
|
||||
zpl_array_append( tokens, entry );
|
||||
|
||||
log_fmt("\nFound %-81s line %d", current, num_lines - left);
|
||||
log_fmt("\nFound %-81s line %d, column %d", current, line, col );
|
||||
|
||||
line += sig_length;
|
||||
pos += sig_length;
|
||||
move_forward( sig_length );
|
||||
goto Skip;
|
||||
}
|
||||
}
|
||||
while ( word++, --words_left );
|
||||
}
|
||||
|
||||
// Namespaces to match
|
||||
@ -400,20 +426,20 @@ void refactor()
|
||||
|
||||
sw nspaces_left = zpl_array_count( Spec::Namespaces);
|
||||
|
||||
do
|
||||
for ( ; nspaces_left; nspaces_left--, nspace++ )
|
||||
{
|
||||
if ( nspace->Sig[0] != line[0] )
|
||||
if ( nspace->Sig[0] != src[0] )
|
||||
continue;
|
||||
|
||||
zpl_string_clear( current );
|
||||
|
||||
u32 sig_length = zpl_string_length( nspace->Sig );
|
||||
current = zpl_string_append_length( current, line, sig_length );
|
||||
current = zpl_string_append_length( current, src, sig_length );
|
||||
|
||||
if ( zpl_string_are_equal( nspace->Sig, current ) )
|
||||
{
|
||||
u32 length = sig_length;
|
||||
char* ns_content = line + sig_length;
|
||||
u32 length = sig_length;
|
||||
char const* ns_content = src + sig_length;
|
||||
|
||||
while ( zpl_char_is_alphanumeric( ns_content[0] ) || ns_content[0] == '_' )
|
||||
{
|
||||
@ -439,26 +465,29 @@ void refactor()
|
||||
|
||||
#if Build_Debug
|
||||
zpl_string_clear( preview );
|
||||
preview = zpl_string_append_length( preview, line, length);
|
||||
log_fmt("\nFound %-40s %-40s line %d", preview, nspace->Sig, num_lines - left);
|
||||
preview = zpl_string_append_length( preview, src, length);
|
||||
log_fmt("\nFound %-40s %-40s line %d, column %d", preview, nspace->Sig, line, col );
|
||||
#endif
|
||||
|
||||
line += length;
|
||||
pos += length;
|
||||
move_forward( length );
|
||||
goto Skip;
|
||||
}
|
||||
}
|
||||
while ( nspace++, --nspaces_left );
|
||||
}
|
||||
|
||||
Skip:
|
||||
if ( line != '\0' )
|
||||
goto Continue_Line;
|
||||
if ( src[0] == '\n' )
|
||||
{
|
||||
line++;
|
||||
col = 0;
|
||||
}
|
||||
|
||||
src++;
|
||||
}
|
||||
while ( lines++, line = *lines, left );
|
||||
while ( --left );
|
||||
|
||||
// Prep data for building the content
|
||||
left = IO::Current_Size;
|
||||
left = zpl_array_count( tokens);
|
||||
|
||||
char* content = IO::Current_Content;
|
||||
|
||||
@ -475,17 +504,19 @@ void refactor()
|
||||
sw sig_length = zpl_string_length( entry->Sig );
|
||||
|
||||
// Append between tokens
|
||||
refactored = zpl_string_append_length( refactored, line, segment_length );
|
||||
line += segment_length + sig_length;
|
||||
refactored = zpl_string_append_length( refactored, content, segment_length );
|
||||
content += segment_length + sig_length;
|
||||
|
||||
segment_length = entry->End - entry->Start - sig_length;
|
||||
|
||||
// Append token
|
||||
if ( entry->Sub )
|
||||
refactored = zpl_string_append( refactored, entry->Sub );
|
||||
{
|
||||
refactored = zpl_string_append( refactored, entry->Sub );
|
||||
}
|
||||
|
||||
refactored = zpl_string_append_length( refactored, line, segment_length );
|
||||
line += segment_length;
|
||||
refactored = zpl_string_append_length( refactored, content, segment_length );
|
||||
content += segment_length;
|
||||
|
||||
previous_end = entry->End;
|
||||
entry++;
|
||||
@ -496,11 +527,13 @@ void refactor()
|
||||
|
||||
if ( entry->End < IO::Current_Size )
|
||||
{
|
||||
refactored = zpl_string_append_length( refactored, line, IO::Current_Size - entry->End );
|
||||
refactored = zpl_string_append_length( refactored, content, IO::Current_Size - 1 - entry->End );
|
||||
}
|
||||
}
|
||||
|
||||
IO::write( refactored );
|
||||
|
||||
zpl_string_clear( refactored );
|
||||
}
|
||||
|
||||
int main( int num, char** arguments )
|
||||
@ -520,6 +553,8 @@ int main( int num, char** arguments )
|
||||
do
|
||||
{
|
||||
refactor();
|
||||
|
||||
zpl_printf("\nRefactored: %s", IO::Sources[IO::Current]);
|
||||
}
|
||||
while ( --left );
|
||||
|
||||
|
Reference in New Issue
Block a user