71 lines
2.1 KiB
C
Generated
71 lines
2.1 KiB
C
Generated
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License. See the LICENSE file in the project root for full license information.
|
|
|
|
#include "tree_sitter/parser.h"
|
|
#include <wctype.h>
|
|
|
|
enum TOKEN_TYPE {
|
|
STATEMENT_TERMINATOR
|
|
};
|
|
|
|
/* --- API --- */
|
|
|
|
void *tree_sitter_powershell_external_scanner_create();
|
|
|
|
void tree_sitter_powershell_external_scanner_destroy(void *p);
|
|
|
|
unsigned tree_sitter_powershell_external_scanner_serialize(void *payload, char *buffer);
|
|
|
|
void tree_sitter_powershell_external_scanner_deserialize(void *payload, const char *buffer, unsigned length);
|
|
|
|
bool tree_sitter_powershell_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols);
|
|
|
|
/* --- Internal Functions --- */
|
|
|
|
static void skip(TSLexer *lexer) { lexer->advance(lexer, true); }
|
|
|
|
static bool scan_statement_terminator(void *payload, TSLexer *lexer, const bool *valid_symbols)
|
|
{
|
|
if (valid_symbols[STATEMENT_TERMINATOR]) {
|
|
lexer->result_symbol = STATEMENT_TERMINATOR;
|
|
// This token has no characters -- everything is lookahead to determine its existence
|
|
lexer->mark_end(lexer);
|
|
|
|
for (;;) {
|
|
if (lexer->lookahead == 0) return true;
|
|
if (lexer->lookahead == '}') return true;
|
|
if (lexer->lookahead == ';') return true;
|
|
if (lexer->lookahead == ')') return true;
|
|
if (lexer->lookahead == '\n') return true;
|
|
if (!iswspace(lexer->lookahead)) return false;
|
|
skip(lexer);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* --- API Implementation --- */
|
|
|
|
bool tree_sitter_powershell_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols)
|
|
{
|
|
return scan_statement_terminator(payload, lexer, valid_symbols);
|
|
}
|
|
|
|
void *tree_sitter_powershell_external_scanner_create()
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
void tree_sitter_powershell_external_scanner_destroy(void *p)
|
|
{
|
|
}
|
|
|
|
unsigned tree_sitter_powershell_external_scanner_serialize(void *payload, char *buffer)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void tree_sitter_powershell_external_scanner_deserialize(void *payload, const char *buffer, unsigned length)
|
|
{
|
|
} |