From 8f52b29386612bd08eaf1926992dcbd40728e128 Mon Sep 17 00:00:00 2001 From: belltoy Date: Fri, 9 Jan 2026 18:19:46 +0800 Subject: [PATCH] Add Erlang support (#196) --- Cargo.lock | 11 + Cargo.toml | 1 + README.md | 1 + crates/codebook/Cargo.toml | 1 + .../src/dictionaries/combined.gen.txt | 541 +++++++++++++++++- crates/codebook/src/queries.rs | 9 + crates/codebook/src/queries/erlang.scm | 8 + crates/codebook/tests/test_erlang.rs | 97 ++++ examples/example.erl | 27 + word_lists/erlang.txt | 538 +++++++++++++++++ 10 files changed, 1233 insertions(+), 1 deletion(-) create mode 100644 crates/codebook/src/queries/erlang.scm create mode 100644 crates/codebook/tests/test_erlang.rs create mode 100644 examples/example.erl create mode 100644 word_lists/erlang.txt diff --git a/Cargo.lock b/Cargo.lock index c16b4c9..77c0eed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -395,6 +395,7 @@ dependencies = [ "tree-sitter-cpp", "tree-sitter-css", "tree-sitter-elixir", + "tree-sitter-erlang", "tree-sitter-go", "tree-sitter-haskell", "tree-sitter-html", @@ -2855,6 +2856,16 @@ dependencies = [ "tree-sitter-language", ] +[[package]] +name = "tree-sitter-erlang" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2091cce4eda19c03d77928c608ac6617445a6a25691dde1e93ac0102467a6be" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "tree-sitter-go" version = "0.25.0" diff --git a/Cargo.toml b/Cargo.toml index 9192a2d..f312d6b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,6 +48,7 @@ tree-sitter-c = "<0.25.0" tree-sitter-cpp = "<0.25.0" tree-sitter-css = "<0.26.0" tree-sitter-elixir = "<0.4.0" +tree-sitter-erlang = "<0.16.0" tree-sitter-go = "<0.26.0" tree-sitter-haskell = "<0.25.0" tree-sitter-html = "<0.25.0" diff --git a/README.md b/README.md index d2521ed..ebac499 100644 --- a/README.md +++ b/README.md @@ -138,6 +138,7 @@ Codebook is in active development. As better dictionaries are added, words that | C++ | ⚠️ | | CSS | ⚠️ | | Elixir | ⚠️ | +| Erlang | ⚠️ | | Go | ✅ | | HTML | ⚠️ | | Haskell | ⚠️ | diff --git a/crates/codebook/Cargo.toml b/crates/codebook/Cargo.toml index a1222ff..a4b8dc4 100644 --- a/crates/codebook/Cargo.toml +++ b/crates/codebook/Cargo.toml @@ -34,6 +34,7 @@ tree-sitter-c.workspace = true tree-sitter-cpp.workspace = true tree-sitter-css.workspace = true tree-sitter-elixir.workspace = true +tree-sitter-erlang.workspace = true tree-sitter-go.workspace = true tree-sitter-haskell.workspace = true tree-sitter-html.workspace = true diff --git a/crates/codebook/src/dictionaries/combined.gen.txt b/crates/codebook/src/dictionaries/combined.gen.txt index 58ddb22..e093cf7 100644 --- a/crates/codebook/src/dictionaries/combined.gen.txt +++ b/crates/codebook/src/dictionaries/combined.gen.txt @@ -6,10 +6,12 @@ aarch ab abbr abc +abcast abi about above abs +absname absolute abspath abstract @@ -22,7 +24,9 @@ according accordion account ace +ack acl +acosh action actionevent actionperformed @@ -55,6 +59,8 @@ air aita ajax alert +algname +algs align all allclasses @@ -76,9 +82,11 @@ amazonaws amp amr an +analyse analytics anchor and +andalso andreturn android angular @@ -107,6 +115,7 @@ apple applescript application apply +appup appx ar arc @@ -137,8 +146,10 @@ asc asctime asf aside +asinh aslist asm +asn asp aspx ass @@ -154,9 +165,11 @@ asserttrue assets assign associated +assocparams ast async at +atanh atom attachment attr @@ -171,6 +184,7 @@ author authors auto autofield +automedia autoplay autorest autowired @@ -200,7 +214,12 @@ backtick backticks backward bad +badarg +badfile badge +badkey +badmatch +badrpc bak banner bar @@ -223,6 +242,8 @@ before beforeeach beforeunload begin +behaviour +behaviours being below bench @@ -233,6 +254,8 @@ bg bgcolor bib bibliographystyle +bif +bif's big bigdecimal biginteger @@ -245,6 +268,9 @@ bindings bit bitfield bits +bitstring +bittype +bittypes black blank blazingly @@ -258,6 +284,7 @@ blog blue blur bmp +bnot body bold bool @@ -288,8 +315,11 @@ browser browserdetector browsers bs +bsl bson +bsr btn +btoken bucket buf buffer @@ -308,6 +338,7 @@ button buttonelement buttonless buttons +bxor by byte bytearrayoutputstream @@ -316,6 +347,8 @@ bytes bz bz2 cab +cacertfile +cacerts cache caf calc @@ -342,6 +375,7 @@ carousel cart cartesian case +casefold cases cassandra cast @@ -357,6 +391,7 @@ cc ccc cccccc ccccff +ccm ccx cd cda @@ -368,10 +403,12 @@ cellpadding cellspacing center cer +cfb cfg cfm cgi ch +chacha chan change changed @@ -382,7 +419,9 @@ char character characters charat +chardata charfield +charlist chars charset chart @@ -397,6 +436,9 @@ chevron child childnodes children +childspec +childspecs +chk chm choices chosen @@ -431,11 +473,14 @@ cloud cls cluster cm +cmac cmd cmp cms +cmsg cmt cn +cnt code codebook codec @@ -443,6 +488,8 @@ codecselfer codecselferc codegen codemap +codepoint +codepoints coding coff coffee @@ -486,6 +533,7 @@ condition conditions conf config +configfd configuration conn connect @@ -529,12 +577,14 @@ could count course cover +coverspec cpp cpt cpu cr cr2 cr3 +crashdump crate cratecontext crc @@ -547,6 +597,7 @@ criteria crl crt crypto +cryptolib cs csh csproj @@ -555,6 +606,7 @@ css cstore cstring csv +cth ctrl ctx ctxt @@ -566,7 +618,9 @@ current currently currenttimemillis cursor +curvename custom +cwd cx dac daemon @@ -582,6 +636,8 @@ dashed dat data database +datagram +datastr datatable datatype date @@ -590,8 +646,10 @@ datetime datetimefield datum day +daystime db dbf +dbg dd ddd dddddd @@ -623,11 +681,13 @@ defmodule defp defstruct deg +dek del delay delete deleted delta +demonitor dependencies dependencyinjection deployment @@ -637,6 +697,7 @@ der dereq derive deriving +des desc describe description @@ -646,6 +707,7 @@ dest destroy detail details +dets dev device devices @@ -653,6 +715,7 @@ dex df dffd dialog +dialyzer dict dictionary did @@ -688,14 +751,17 @@ djvu dl dll dmg +dmonitor dng dngettext dns do doc +docgen docker dockercmd dockersuite +doclet docm docs doctrine @@ -715,6 +781,8 @@ domrefcell domstring don done +dont +dontroute dorequest dot dotm @@ -735,14 +803,19 @@ drive driver drop dropdown +droplast dropup +dropwhile drupal drv ds_store +dsa dsk +dss dst dt dtd +dtls dts dtype dump @@ -756,52 +829,132 @@ dx dxf dximagetransform dylib +dyn déjà +e2big +eacces each +eaddrinuse +eaddrnotavail +eadv +eafnosupport +eagain +ealign +ealready ear ease easing +ebade +ebadf +ebadfd +ebadmsg +ebadr +ebadrpc +ebadrqc +ebadslt ebebeb +ebfont +ebin ebml +ebusy ec +ecb +ecc +eccs +ecdh +ecdsa +echild +echrng eclipse +ecomm +econnaborted +econnrefused +econnreset +ecpk ecto ecx +eddh +eddsa +edeadlk +edeadlock +edestaddrreq +edirty edit editor edn +edoc +edom +edotdot +edquot edu +eduppkg eee eeeeee eeeeff +eexist +efault +efbig effect +eftype +eheap +ehostdown +ehostunreach +eidrm +einit +einprogress +eintr +einval +eio +eisconn +eisdir +eisnam either el +el2hlt +el2nsync +el3hlt +el3rst elasticsearch +elbin +eldap elem element elements elemfield elems elf +elibacc +elibbad +elibexec +elibmax +elibscn elif ellipsis elm +elnrng +eloop +elp else em email embed ember emf +emfile emit eml +emlink emlx emph empty +emsgsize +emultihop emz en enable enabled +enametoolong +enavail enc encbinary encodable @@ -817,7 +970,39 @@ endcolorstr endif endpoint endpoints +enet +enetdown +enetreset +enetunreach +enfile engine +enoano +enobufs +enocsi +enodata +enodev +enoent +enoexec +enolck +enolink +enomem +enomsg +enonet +enopkg +enoprotoopt +enospc +enosr +enosym +enosys +enotblk +enotconn +enotdir +enotempty +enotnam +enotsock +enotsup +enotty +enotuniq entity entries entry @@ -826,8 +1011,23 @@ enumerate env environ environment +enxio eof +eopnotsupp eot +eoverflow +eperm +epfnosupport +epipe +epmd +epp +eproclim +eprocunavail +eprogmismatch +eprogunavail +eproto +eprotonosupport +eprototype eps epub eq @@ -835,43 +1035,87 @@ equal equals equalto equiv +erange erb +erefused +eremchg +eremdev +eremote +eremoteio +eremoterelease +erf +erfc erl +erlangrc +erlfmt +erofs +erpcmismatch err +erremote error errorf errorisnil errors errs errunexpectedeof +erts es es6 esbuild +escript +escripts +eshell +eshutdown +esock +esocktnosupport +espipe +esrch +esrmnt +estale +esuccess etag etc etcd +etime +etimedout +etoomanyrefs +ets +etxtbsy +euclean +eunatch +eunit +eusers ev even evenodd event eventname events +eversion +evp evt +ewouldblock +ewqalizer ex example examples +exbadport exc except exception exceptions +exclusiveaddruse +exdev exe exec execs execute +exfull exist existing exists exit +exor exp expand expect @@ -905,6 +1149,7 @@ fade fafafa fail failed +failover fake faker false @@ -915,9 +1160,11 @@ fatalf favicon fc fcfe +fcgi fcx fd fdede +fdopen feature featured feedback @@ -934,6 +1181,7 @@ fig figcaption figure file +filelib filename filenotfoundexception filepath @@ -941,6 +1189,7 @@ files filesystem fill filter +filtermap filters final finally @@ -953,11 +1202,14 @@ firstrow fish fixed fixme +fixtable fixture flac flag flags flat +flatlength +flatmap fld flex flexbox @@ -969,6 +1221,7 @@ fluid flush flv flyout +fmod fmt fn fname @@ -978,6 +1231,8 @@ fnt focus focused folder +foldl +foldr following fomo fon @@ -1007,26 +1262,32 @@ frame framed frames framework +fread free freemium from fs +fsck +fsm fsx ftl ftype full fullcomment fullscreen +fullsweep func function functions future +fwrite fx ga gadget gallery gaq gc +gcm gdb gedmo gemfile @@ -1039,23 +1300,41 @@ gensupport geom geometry get +getaddr +getaddrinfo +getaddrs getattr getattribute getclass getelementbyid getelementsbytagname +getenv +gethostbyaddr +gethostbyname +gethostname getid +getif +getifaddrs +getiflist getinstance getkey getlogger getmessage getname +getnameinfo +getopts +getpid getproperty gets +getserv +getservbyname +getservbyport +getstat getstring gettext gettype getvalue +gex gif github gitignore @@ -1098,7 +1377,10 @@ groovy group groupheader grouplayout +groupleader +groupname groups +grun grunt gt gtk @@ -1107,6 +1389,7 @@ guid gulp gwt gz +gzip h264 h265 hadoop @@ -1127,6 +1410,7 @@ hashcode hasher hashers hashmap +hashs hashset hasnext hasownproperty @@ -1139,6 +1423,7 @@ head header headers heading +healthz heapsizeof heex heic @@ -1155,23 +1440,29 @@ hex hgroup hh hi +hib hibernate hidden hide hierarchy highlight hint +hipe history hljs +hmac home hooks horizontal host +hostent +hostkey hostname hover hpp hr href +hrl hs hta htaccess @@ -1179,6 +1470,8 @@ htm html htmlelement http +httpc +httph httpmethod https httpservletrequest @@ -1200,8 +1493,14 @@ ids idx ie if +ifaddr +ifaddrs +ifdef iff +ifget +ifndef iframe +ifset ifttt ignore illegalargumentexception @@ -1220,12 +1519,17 @@ importerror ims in inc +incl include +indecies indent index indexof indicator indicators +inet +inetrc +inets infcx infer infinite @@ -1242,6 +1546,7 @@ ini init initial initialize +initmsg inject inl inline @@ -1283,16 +1588,22 @@ inverse inverted invoke io +iodata ioerror ioexception +iolist ion ioresult ios ioutil +iov +iovec ip ipa ipcsender +ipread iprot +ipwrite ipynb is isabs @@ -1321,6 +1632,7 @@ j2 jackson jade jar +jaro java javadoc javafx @@ -1362,6 +1674,7 @@ jstree jsx juju jumbotron +jumpconst junit just justified @@ -1373,12 +1686,24 @@ kernel key keyboard keycode +keydelete keyerror keyevent +keyfind keyframes keygen +keyinfo +keylog +keymap +keymember +keymerge +keypos +keyreplace keys +keysearch +keysort keystore +keytake keyup keyword khtml @@ -1415,6 +1740,7 @@ layer layout layoutinflater lck +leex left legend len @@ -1431,6 +1757,7 @@ lhs li lib libc +libcrypto library libs license @@ -1458,6 +1785,7 @@ lisp list listener listeners +listenv listmeta literals little @@ -1478,11 +1806,14 @@ local locale locales localhost +localtime location locationname lock lodash log +logdir +logdirs logf logger loggerfactory @@ -1490,6 +1821,7 @@ logging login logj logo +logopts logrus long longhands @@ -1526,6 +1858,8 @@ make makefile manager map +mapfoldl +mapfoldr mapping maps margin @@ -1553,6 +1887,7 @@ maximenuck maximum maxresults maybeauto +mbcs mc md mdb @@ -1562,6 +1897,7 @@ mdl mdx me means +meck media medium mega @@ -1585,7 +1921,11 @@ metadata method methods metro +mfargs +mfas mfp +mib +mibs microsoft mid middle @@ -1595,6 +1935,7 @@ mif might migration migrations +milli millisecond min minecraft @@ -1607,11 +1948,14 @@ mk mka mkd mkdown +mkeysearch +mkeysort mkv ml mlabels mli mm +mnesia mobi mobile mock @@ -1645,13 +1989,18 @@ mpeg mpg mpp mpt +mref +mreq ms +msacc msearchresults +msfilter msg msglen msi msm mso +msort msp msvc mt @@ -1659,6 +2008,7 @@ mts mu mui multi +multicall multiline multipage multiple @@ -1668,6 +2018,7 @@ mut mutable mutbl mux +mwc myd mywebsite name @@ -1675,6 +2026,7 @@ names namespace namespaces native +nativename nav navbar navbarcell @@ -1691,6 +2043,7 @@ needed needs nef negatable +neighbours nes nested net @@ -1708,48 +2061,66 @@ newrequest newval next nextend +nfkd ng ngdoc nib nick +nif +nifs nil nim nio nix njcongleton no +noarp nobr +nocatch node nodeid +nodelay nodename nodes nodetype nodetypeid noerror +nofile noframe +nolink +nomatch nomethod non none noop noopener +noproc noqa noreferrer normal noscript +noshell +nosuspend not note nothing notification notimplementederror notnull +notrailers +notsup notto nova now +nowarn nowrap np +nregs nrg ns nth +nthtail +ntoa null nullable nullpointerexception @@ -1758,15 +2129,18 @@ number numpy nupkg nuspec +nxdomain oauth oban obj object objectmeta objects +objfile obligation observer occurs +ocsp ocx odb odd @@ -1776,12 +2150,14 @@ odp ods odt of +ofb off offset og ogg ogm ogv +oid ok ol old @@ -1805,6 +2181,7 @@ op opacity open openapi +opengl openshift operation operations @@ -1823,9 +2200,13 @@ oracle orange orbit ord +orddict order ordered ordering +ordset +ordsets +orelse orf org orig @@ -1857,6 +2238,7 @@ owl owned owner ownerdocument +oxf p12 p7b p7c @@ -1890,6 +2272,7 @@ parseexception parsefloat parseint parser +parsify part partial partialeq @@ -1898,16 +2281,24 @@ parts pas pass passed +passthrough password pat patch patcher path +patha pathbuf paths +pathsa +pathsz +pathtype +pathz pattern payload pb +pbe +pbes pbf pbkdf pbm @@ -1920,6 +2311,9 @@ pcx pdb pdf peer +peercert +peername +peernames peg pem pending @@ -1934,6 +2328,7 @@ pgp phantomdata phar phaser +phash phone php php3 @@ -1945,6 +2340,7 @@ pi pic picker pid +pids pills pink pipe @@ -1952,7 +2348,12 @@ pipeline pipelineid pixels pk +pkey pkg +pki +pkix +pktinfo +pktoptions pl placeholder plain @@ -1967,6 +2368,7 @@ plugin plugins plus pm +pmtudisc png po pod @@ -1974,11 +2376,13 @@ pods point pointd pointer +pointopoint points policy polymer pool pop +popf popover popr popup @@ -1987,10 +2391,13 @@ portal portfolio portlet ports +portsel pos position +posixtime possible post +postcomments postgre postindex posts @@ -2003,6 +2410,8 @@ ppt pptm pptx pre +pread +precomments prefix prefs prelude @@ -2024,18 +2433,24 @@ printf println printstacktrace private +privkey pro process +procs product profile progid +progname program progress project +promisc promise prop properties property +proplist +proplists props protected proto @@ -2051,16 +2466,22 @@ ps1 psd psi psm1 +pspawn +pss pst pt ptr pub public +publickey pug pull purple push +pushf put +putenv +pwrite px pxd py @@ -2075,6 +2496,7 @@ pyw pyx qcow qcow2 +qlc qname qtcore qtgui @@ -2099,6 +2521,7 @@ rcx rda rdata rdf +rdn rdoc rds re @@ -2114,16 +2537,23 @@ reason reauthenticete rebrand rebranding +recbuf receiver record rect recv +recvfrom +recvmsg +recvtclass +recvtos +recvttl red redirect redownload ref refcell reference +referer reflect refresh reg @@ -2133,12 +2563,18 @@ region regions register registry +regs reject rel related relative release +relname reloader +reltool +relup +relvsn +relx rem remove removed @@ -2155,6 +2591,7 @@ representation represents req reqerr +reqids request requests require @@ -2188,6 +2625,8 @@ return returned returns retval +reuseaddr +reuseport reveal reverse rf @@ -2196,11 +2635,14 @@ rgba rhs rhtml right +rkeymerge rkt rlib rlock +rlx rm rmd +rmerge rmvb rng roachpb @@ -2209,6 +2651,8 @@ roboto role rom root +rootdir +rootname rotate rotated rotatex @@ -2224,17 +2668,23 @@ rpc rpm rr rs +rsassa +rsn rspec rss +rssassa rst rt rtf rtl +rtoinfo rtype ru ruby +rukeymerge rule rules +rumerge run rune runlock @@ -2255,6 +2705,7 @@ safariextz same samp sans +sasl sass sav save @@ -2262,6 +2713,7 @@ savedinstancestate sb sb2 sb3 +sbcs sbt sc scala @@ -2285,6 +2737,7 @@ scrolling scrollleft scrolltop scss +sctp sdf sdk sdkshapetraits @@ -2308,6 +2761,10 @@ self semibold send sender +sendfile +sendmsg +sendto +sendv sent seo separator @@ -2328,9 +2785,15 @@ servletexception sess session set +setcookie +setelement setid setname +setnode +setopts +setpeername sets +setsockname settext setting settings @@ -2358,9 +2821,16 @@ shutil side sidebar sig +sigabrt +sigalrm +sigchld sign signal signature +sigstop +sigterm +sigtstp +sigusr since sinergi single @@ -2391,18 +2861,27 @@ sln slug sm small +smallint smart smartslider smi smoothing +smp +sname snap snapshot +sndbuf snippet snk +snmp so social sock +sockaddr socket +socketoption +sockname +socknames sol solid some @@ -2428,6 +2907,8 @@ spin spinner splice split +splitmix +splitwith springframework sprintf sql @@ -2441,11 +2922,13 @@ square sqz sr2 src +srp srt srv ss ssi ssl +sslsocket st stable stack @@ -2453,9 +2936,12 @@ stacked standard star start +startchild startcolorstr +startlink startswith state +statem statement static staticmethod @@ -2465,6 +2951,7 @@ statuscode statusok std stderr +stdlib stdout step steps @@ -2507,6 +2994,7 @@ stylus sub subject sublime +sublist submenu submit subnav @@ -2558,8 +3046,10 @@ syscall system systemd systemexception +systools tab tabend +tabfile tabindex table tableblock @@ -2574,6 +3064,7 @@ tags tail tailwindcss take +takewhile tar target targets @@ -2583,7 +3074,9 @@ tbz tbz2 tc tcl +tclass tcp +tcpip tcsh tcx td @@ -2600,8 +3093,12 @@ terms terraform test testcase +testdata +testdir testing +testname tests +testspec tex texi text @@ -2643,6 +3140,7 @@ thru thumb thumbnail thumbs +tid tif tiff tile @@ -2651,11 +3149,17 @@ timeline timeout timer timestamp +timestr +timetrap +timetraps timeunit +timeval timing +tinyint tip title titlebar +titlecase tl tldr tls @@ -2685,11 +3189,13 @@ topleft topnav topright torrent +tos tostring total touch tp tpl +tprof tr trace traceback @@ -2710,11 +3216,13 @@ translation transmute transparent tree +tref triangle trigger trim trimspace true +trunc try trydecodeasnil ts @@ -2725,6 +3233,7 @@ tt tta ttc ttf +tty tuple tween twig @@ -2750,14 +3259,19 @@ ua ubuntu uc uffff +ufold ui uid uifaces uint uintptr uk +ukeymerge +ukeysort ul +umerge un +unalias unchecked uncomment undefined @@ -2772,6 +3286,7 @@ unit unittest unity unitypackage +universaltime unix unixnano unknown @@ -2782,11 +3297,13 @@ unparsable unpatched unreachable unrecognized +unrecv unsafe unsecure unsecured unsecures unsecuring +unsetenv unstable unsupportedoperationexception until @@ -2799,6 +3316,7 @@ updated upload uppercase upscaled +uptime uri url urllib @@ -2811,10 +3329,12 @@ usd use used user +userconfig username users using usize +usort usr utf util @@ -2834,6 +3354,7 @@ valueof valueref values var +varchar variable variables variant @@ -2855,6 +3376,7 @@ vec vector vendored vendoring +ver verbose verdana verify @@ -2891,10 +3413,12 @@ volumes vsd vsdx vsix +vsn vss vst vue wait +wakeup want war warn @@ -2909,6 +3433,7 @@ waves way wbmp wc +wchar we web webdev @@ -2926,6 +3451,7 @@ what whatwg when where +whereis whether which while @@ -2945,6 +3471,7 @@ wiretype with within without +wlongvarchar wma wmf wmv @@ -2952,6 +3479,7 @@ woff woff2 woocommerce word +wordsize work world would @@ -2959,6 +3487,7 @@ wp wps wrap wrapper +wread write writeheader writeln @@ -2970,6 +3499,7 @@ ws wsdl wsf wso +wvarchar www wx xaml @@ -2990,6 +3520,7 @@ xlsx xlt xltm xltx +xmerl xml xmlaccessortype xmlaccesstype @@ -3012,6 +3543,7 @@ xxxl xz yaml year +yecc yellow yes yet @@ -3023,8 +3555,15 @@ you your yui zero +zflush zip +zipwith +zlevel +zmemlevel zone zoom zsh -zshrc \ No newline at end of file +zshrc +zstrategy +zstream +zwindowbits \ No newline at end of file diff --git a/crates/codebook/src/queries.rs b/crates/codebook/src/queries.rs index 54893ca..c1cb800 100644 --- a/crates/codebook/src/queries.rs +++ b/crates/codebook/src/queries.rs @@ -10,6 +10,7 @@ pub enum LanguageType { Cpp, Css, Elixir, + Erlang, Go, HTML, Haskell, @@ -89,6 +90,13 @@ pub static LANGUAGE_SETTINGS: &[LanguageSetting] = &[ query: include_str!("queries/elixir.scm"), extensions: &["ex", "exs"], }, + LanguageSetting { + type_: LanguageType::Erlang, + ids: &["erlang"], + dictionary_ids: &["erlang"], + query: include_str!("queries/erlang.scm"), + extensions: &["erl", "hrl"], + }, LanguageSetting { type_: LanguageType::Python, ids: &["python"], @@ -244,6 +252,7 @@ impl LanguageSetting { LanguageType::Cpp => Some(tree_sitter_cpp::LANGUAGE.into()), LanguageType::Css => Some(tree_sitter_css::LANGUAGE.into()), LanguageType::Elixir => Some(tree_sitter_elixir::LANGUAGE.into()), + LanguageType::Erlang => Some(tree_sitter_erlang::LANGUAGE.into()), LanguageType::Go => Some(tree_sitter_go::LANGUAGE.into()), LanguageType::HTML => Some(tree_sitter_html::LANGUAGE.into()), LanguageType::Haskell => Some(tree_sitter_haskell::LANGUAGE.into()), diff --git a/crates/codebook/src/queries/erlang.scm b/crates/codebook/src/queries/erlang.scm new file mode 100644 index 0000000..231ebc2 --- /dev/null +++ b/crates/codebook/src/queries/erlang.scm @@ -0,0 +1,8 @@ +(comment) @comment +(string) @string +(atom) @string.special.symbol + +(var) @identifier + +(function_clause + name: (atom) @identifier) diff --git a/crates/codebook/tests/test_erlang.rs b/crates/codebook/tests/test_erlang.rs new file mode 100644 index 0000000..d485ab1 --- /dev/null +++ b/crates/codebook/tests/test_erlang.rs @@ -0,0 +1,97 @@ +use codebook::{ + parser::{TextRange, WordLocation}, + queries::LanguageType, +}; +mod utils; + +#[test] +fn test_erlang_simple() { + utils::init_logging(); + let processor = utils::get_processor(); + let sample_text = r#" + -module(calculatr). + % This is an exampl module that performz calculashuns + -export([add/2]). + + add(Numbr1, Numbr2) -> + Resalt = Numbr1 + Numbr2, + Resalt. + "#; + let expected = vec![ + "Numbr", + "Resalt", + "calculashuns", + "calculatr", + "exampl", + "performz", + ]; + let binding = processor + .spell_check(sample_text, Some(LanguageType::Erlang), None) + .to_vec(); + let mut misspelled = binding + .iter() + .map(|r| r.word.as_str()) + .collect::>(); + misspelled.sort(); + println!("Misspelled words: {misspelled:?}"); + assert_eq!(misspelled, expected); +} + +#[test] +fn test_erlang_comment_location() { + utils::init_logging(); + let sample_erlang = r#" + % Structur definition with misspellings + "#; + let expected = vec![WordLocation::new( + "Structur".to_string(), + vec![TextRange { + start_byte: 11, + end_byte: 19, + }], + )]; + let processor = utils::get_processor(); + let misspelled = processor + .spell_check(sample_erlang, Some(LanguageType::Erlang), None) + .to_vec(); + println!("Misspelled words: {misspelled:?}"); + assert_eq!(misspelled, expected); + assert!(misspelled[0].locations.len() == 1); +} + +#[test] +fn test_erlang_pattern_matching() { + utils::init_logging(); + let sample_erlang = r#" + -module(example). + -export([handle_response/1]). + + handle_response({ok, Resalt}) -> + {succes, Resalt}; + handle_response({error, Reson}) -> + {failur, Reson}. + + parse_message(#{type := <<"notfication">>, conten := Conten}) -> + process_notfication(Conten). + "#; + let expected = vec![ + "Conten", + "Resalt", + "Reson", + "conten", + "failur", + "notfication", + "succes", + ]; + let processor = utils::get_processor(); + let binding = processor + .spell_check(sample_erlang, Some(LanguageType::Erlang), None) + .to_vec(); + let mut misspelled = binding + .iter() + .map(|r| r.word.as_str()) + .collect::>(); + misspelled.sort(); + println!("Misspelled words: {misspelled:?}"); + assert_eq!(misspelled, expected); +} diff --git a/examples/example.erl b/examples/example.erl new file mode 100644 index 0000000..2c83099 --- /dev/null +++ b/examples/example.erl @@ -0,0 +1,27 @@ +%% @doc A comprehensiv showcaze of Erlang languaje feetures. +-module(example). + +-include_lib("kernel/include/logger.hrl"). + +-export([handle_response/1]). + +-define(SAMPLE_CONST_RESON, <<"Sample Reson">>). + +handle_response({ok, Resalt}) -> + {succes, Resalt}; +handle_response({error, Reson}) -> + {failur, Reson}. + +parse_message(#{type := <<"notfication">>, conten := Conten} = Param) -> + case Param of + #{type := Tyep = <<"notfication">>} -> + ?LOG_INFO("parse type: ~s", [Tyep]), + process_notfication(Conten); + _Other -> + ?LOG_WARNING("Unknown message type: ~p", [Param]), + ok + end. + +process_notfication(_Content) -> + ?LOG_DEBUG("Processing notification: ~s...", [?SAMPLE_CONST_RESON]), + ok. diff --git a/word_lists/erlang.txt b/word_lists/erlang.txt new file mode 100644 index 0000000..7c75657 --- /dev/null +++ b/word_lists/erlang.txt @@ -0,0 +1,538 @@ +abcast +absname +ack +acosh +algname +algs +analyse +andalso +appup +asinh +asn +assocparams +atanh +automedia +badarg +badfile +badkey +badmatch +badrpc +behaviour +behaviours +bif +bitstring +bittype +bittypes +bnot +bsl +bsr +btoken +bxor +cacertfile +cacerts +casefold +ccm +cfb +chacha +chardata +charlist +childspec +childspecs +chk +cmac +cmsg +cnt +codepoint +codepoints +configfd +coverspec +crashdump +cryptolib +cth +curvename +cwd +datagram +datastr +daystime +dbg +dek +demonitor +des +dets +dialyzer +dmonitor +docgen +doclet +dont +dontroute +droplast +dropwhile +dsa +dss +dtls +dyn +e2big +eacces +eaddrinuse +eaddrnotavail +eadv +eafnosupport +eagain +ealign +ealready +ebade +ebadf +ebadfd +ebadmsg +ebadr +ebadrpc +ebadrqc +ebadslt +ebfont +ebin +ebusy +ecb +ecc +eccs +ecdh +ecdsa +echild +echrng +ecomm +econnaborted +econnrefused +econnreset +ecpk +eddh +eddsa +edeadlk +edeadlock +edestaddrreq +edirty +edoc +edom +edotdot +edquot +eduppkg +eexist +efault +efbig +eftype +eheap +ehostdown +ehostunreach +eidrm +einit +einprogress +eintr +einval +eio +eisconn +eisdir +eisnam +el2hlt +el2nsync +el3hlt +el3rst +elbin +eldap +elibacc +elibbad +elibexec +elibmax +elibscn +elnrng +eloop +elp +emfile +emlink +emsgsize +emultihop +enametoolong +enavail +enet +enetdown +enetreset +enetunreach +enfile +enoano +enobufs +enocsi +enodata +enodev +enoent +enoexec +enolck +enolink +enomem +enomsg +enonet +enopkg +enoprotoopt +enospc +enosr +enosym +enosys +enotblk +enotconn +enotdir +enotempty +enotnam +enotsock +enotsup +enotty +enotuniq +enxio +eopnotsupp +eoverflow +eperm +epfnosupport +epipe +epmd +epp +eproclim +eprocunavail +eprogmismatch +eprogunavail +eproto +eprotonosupport +eprototype +erange +erefused +eremchg +eremdev +eremote +eremoteio +eremoterelease +erf +erfc +erlangrc +erlfmt +erofs +erpcmismatch +erremote +erts +escript +escripts +eshell +eshutdown +esock +esocktnosupport +espipe +esrch +esrmnt +estale +esuccess +etime +etimedout +etoomanyrefs +ets +etxtbsy +euclean +eunatch +eunit +eusers +eversion +evp +ewouldblock +ewqalizer +exbadport +exclusiveaddruse +exdev +exfull +exor +failover +fcgi +fdopen +filelib +filtermap +fixtable +flatlength +flatmap +fmod +foldl +foldr +fread +fsck +fsm +fullsweep +fwrite +gcm +getaddr +getaddrinfo +getaddrs +getenv +gethostbyaddr +gethostbyname +gethostname +getif +getifaddrs +getiflist +getnameinfo +getopts +getpid +getserv +getservbyname +getservbyport +getstat +gex +groupleader +groupname +grun +gzip +hashs +healthz +hib +hipe +hmac +hostent +hostkey +hrl +httpc +httph +ifaddr +ifaddrs +ifdef +ifget +ifndef +ifset +incl +inet +inetrc +inets +initmsg +iodata +iolist +iov +iovec +ipread +ipwrite +jaro +jumpconst +keydelete +keyfind +keyinfo +keylog +keymap +keymember +keymerge +keypos +keyreplace +keysearch +keysort +keytake +leex +libcrypto +listenv +localtime +logdir +logdirs +logopts +mapfoldl +mapfoldr +mbcs +meck +mfargs +mfas +mib +mibs +milli +mkeysearch +mkeysort +mnesia +mref +mreq +msacc +msfilter +msort +multicall +mwc +nativename +neighbours +nfkd +nif +nifs +noarp +nocatch +nodelay +nofile +nolink +nomatch +noproc +noshell +nosuspend +notrailers +notsup +nowarn +nregs +nthtail +ntoa +nxdomain +objfile +ocsp +ofb +oid +opengl +orddict +ordset +ordsets +orelse +oxf +parsify +passthrough +patha +pathsa +pathsz +pathtype +pathz +pbe +pbes +peercert +peername +peernames +phash +pids +pkey +pki +pkix +pktinfo +pktoptions +pmtudisc +pointopoint +popf +portsel +posixtime +postcomments +pread +precomments +privkey +procs +progname +promisc +proplist +proplists +pspawn +pss +publickey +pushf +putenv +pwrite +qlc +rdn +recbuf +recvfrom +recvmsg +recvtclass +recvtos +recvttl +referer +regs +relname +reltool +relup +relvsn +relx +reqids +reuseaddr +reuseport +rkeymerge +rlx +rmerge +rootdir +rootname +rsassa +rsn +rssassa +rtoinfo +rukeymerge +rumerge +sasl +sbcs +sctp +sendfile +sendmsg +sendto +sendv +setcookie +setelement +setnode +setopts +setpeername +setsockname +sigabrt +sigalrm +sigchld +sigstop +sigterm +sigtstp +sigusr +smallint +smp +sname +sndbuf +snmp +sockaddr +socketoption +sockname +socknames +splitmix +splitwith +srp +sslsocket +startchild +startlink +statem +stdlib +sublist +systools +tabfile +takewhile +tclass +tcpip +testdata +testdir +testname +testspec +tid +timestr +timetrap +timetraps +timeval +tinyint +titlecase +tos +tprof +tref +trunc +tty +ufold +ukeymerge +ukeysort +umerge +unalias +unicode +universaltime +unrecv +unsetenv +uptime +userconfig +usort +varchar +ver +vsn +wakeup +wchar +whereis +wlongvarchar +wordsize +wread +wvarchar +xmerl +yecc +zflush +zipwith +zlevel +zmemlevel +zstrategy +zstream +zwindowbits