mirror of https://github.com/tri11paragon/floc.git
bad attempt at language huristics
parent
91a01542df
commit
2dccaa154e
|
@ -3,5 +3,6 @@
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
<mapping directory="$PROJECT_DIR$/lib/blt" vcs="Git" />
|
<mapping directory="$PROJECT_DIR$/lib/blt" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$/lib/blt/libraries/parallel-hashmap" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -1,5 +1,5 @@
|
||||||
cmake_minimum_required(VERSION 3.25)
|
cmake_minimum_required(VERSION 3.25)
|
||||||
project(floc VERSION 0.0.8)
|
project(floc VERSION 0.0.9)
|
||||||
|
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
|
|
||||||
|
@ -19,6 +19,10 @@ FetchContent_Declare(ftxui
|
||||||
GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
|
GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
|
||||||
GIT_TAG v5.0.0
|
GIT_TAG v5.0.0
|
||||||
)
|
)
|
||||||
|
FetchContent_Declare(json
|
||||||
|
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
||||||
|
GIT_TAG v3.11.3
|
||||||
|
)
|
||||||
|
|
||||||
FetchContent_GetProperties(ftxui)
|
FetchContent_GetProperties(ftxui)
|
||||||
if(NOT ftxui_POPULATED)
|
if(NOT ftxui_POPULATED)
|
||||||
|
@ -26,11 +30,12 @@ if(NOT ftxui_POPULATED)
|
||||||
add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
|
add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(floc ${BLT_TARGET})
|
target_link_libraries(floc PRIVATE BLT)
|
||||||
target_link_libraries(floc
|
target_link_libraries(floc
|
||||||
PRIVATE ftxui::screen
|
PRIVATE ftxui::screen
|
||||||
PRIVATE ftxui::dom
|
PRIVATE ftxui::dom
|
||||||
PRIVATE ftxui::component
|
PRIVATE ftxui::component
|
||||||
|
PRIVATE json
|
||||||
)
|
)
|
||||||
|
|
||||||
target_compile_options(floc PRIVATE -Wall -Werror -Wpedantic -Wno-comment)
|
target_compile_options(floc PRIVATE -Wall -Werror -Wpedantic -Wno-comment)
|
||||||
|
|
|
@ -19,6 +19,13 @@
|
||||||
#ifndef BLT_FLOC_ANALYZER_H
|
#ifndef BLT_FLOC_ANALYZER_H
|
||||||
#define BLT_FLOC_ANALYZER_H
|
#define BLT_FLOC_ANALYZER_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
|
#include <functional>
|
||||||
|
#include <vector>
|
||||||
|
#include <blt/std/hashmap.h>
|
||||||
|
#include <blt/std/types.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file provides an analyzer class for counting lines of code in a file along with a recursive parser for finding files
|
* This file provides an analyzer class for counting lines of code in a file along with a recursive parser for finding files
|
||||||
* it also provides a utility class to build a structure which mimics the file system directories alongside relevant code
|
* it also provides a utility class to build a structure which mimics the file system directories alongside relevant code
|
||||||
|
@ -26,4 +33,72 @@
|
||||||
* maybe split this into a few header files?
|
* maybe split this into a few header files?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
namespace blt::floc
|
||||||
|
{
|
||||||
|
static inline const constexpr auto EMPTY_FUNCTION = [](std::string_view contents) {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct associated_file_t
|
||||||
|
{
|
||||||
|
std::string file_extension;
|
||||||
|
std::string file_name;
|
||||||
|
|
||||||
|
associated_file_t() = default;
|
||||||
|
|
||||||
|
associated_file_t(std::string_view file_extension, std::string_view file_name): file_extension(file_extension), file_name(file_name)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
class language_t
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
// extension -> file name
|
||||||
|
blt::hashmap_t<std::string, std::string> language_files;
|
||||||
|
std::function<bool(std::string_view)> matches_func;
|
||||||
|
public:
|
||||||
|
language_t(): matches_func(EMPTY_FUNCTION)
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit language_t(std::function<bool(std::string_view)> matches_func): matches_func(std::move(matches_func))
|
||||||
|
{}
|
||||||
|
|
||||||
|
inline bool matches(std::string_view file_extension, std::string_view file_contents)
|
||||||
|
{
|
||||||
|
return language_files.find(std::string(file_extension)) != language_files.end() && matches_func(file_contents);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline language_t& add(const associated_file_t& file)
|
||||||
|
{
|
||||||
|
language_files[file.file_extension] = file.file_name;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline language_t& add(std::string_view extension, std::string_view name)
|
||||||
|
{
|
||||||
|
return add(associated_file_t{extension, name});
|
||||||
|
}
|
||||||
|
|
||||||
|
inline language_t& add(const std::vector<std::string>& extensions, std::string_view name)
|
||||||
|
{
|
||||||
|
for (const auto& v : extensions)
|
||||||
|
add(v, name);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline const std::vector<language_t> BASE_LANGUAGES = {
|
||||||
|
language_t().add("c", "C Source").add("h", "C/C++ Header"),
|
||||||
|
language_t().add({"cpp", "cxx", "cc"}, "C++ Source").add("h", "C/C++ Header").add("hpp", "C++ Header"),
|
||||||
|
language_t().add("java", "Java Source"),
|
||||||
|
language_t().add("rs", "Rust Source"),
|
||||||
|
language_t().add({"py", "pyo"}, "Python Source"),
|
||||||
|
language_t().add("rb", "Ruby Source"),
|
||||||
|
language_t().add("pl", "Perl Source"),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif // BLT_FLOC_ANALYZER_H
|
#endif // BLT_FLOC_ANALYZER_H
|
||||||
|
|
Loading…
Reference in New Issue