1#[allow(dead_code)]
11const BASE: &str = "https://surrealdb.com/docs/surrealql";
12
13pub fn doc_url(keyword: &str) -> Option<&'static str> {
22 let lower = keyword.to_lowercase();
23 let trimmed = lower.trim();
24 match trimmed {
25 "access" => Some("https://surrealdb.com/docs/surrealql/statements/access"),
27 "begin" | "begin transaction" => {
28 Some("https://surrealdb.com/docs/surrealql/statements/begin")
29 }
30 "break" => Some("https://surrealdb.com/docs/surrealql/statements/break"),
31 "cancel" | "cancel transaction" => {
32 Some("https://surrealdb.com/docs/surrealql/statements/cancel")
33 }
34 "commit" | "commit transaction" => {
35 Some("https://surrealdb.com/docs/surrealql/statements/commit")
36 }
37 "continue" => Some("https://surrealdb.com/docs/surrealql/statements/continue"),
38 "create" => Some("https://surrealdb.com/docs/surrealql/statements/create"),
39 "delete" => Some("https://surrealdb.com/docs/surrealql/statements/delete"),
40 "explain" => Some("https://surrealdb.com/docs/surrealql/statements/explain"),
41 "for" => Some("https://surrealdb.com/docs/surrealql/statements/for"),
42 "if" | "if else" | "else" => Some("https://surrealdb.com/docs/surrealql/statements/ifelse"),
43 "info" => Some("https://surrealdb.com/docs/surrealql/statements/info"),
44 "insert" => Some("https://surrealdb.com/docs/surrealql/statements/insert"),
45 "kill" => Some("https://surrealdb.com/docs/surrealql/statements/kill"),
46 "let" => Some("https://surrealdb.com/docs/surrealql/statements/let"),
47 "live" | "live select" => Some("https://surrealdb.com/docs/surrealql/statements/live"),
48 "rebuild" => Some("https://surrealdb.com/docs/surrealql/statements/rebuild"),
49 "relate" => Some("https://surrealdb.com/docs/surrealql/statements/relate"),
50 "remove" => Some("https://surrealdb.com/docs/surrealql/statements/remove"),
51 "return" => Some("https://surrealdb.com/docs/surrealql/statements/return"),
52 "select" => Some("https://surrealdb.com/docs/surrealql/statements/select"),
53 "show" | "show changes" => Some("https://surrealdb.com/docs/surrealql/statements/show"),
54 "sleep" => Some("https://surrealdb.com/docs/surrealql/statements/sleep"),
55 "throw" => Some("https://surrealdb.com/docs/surrealql/statements/throw"),
56 "update" => Some("https://surrealdb.com/docs/surrealql/statements/update"),
57 "upsert" => Some("https://surrealdb.com/docs/surrealql/statements/upsert"),
58 "use" => Some("https://surrealdb.com/docs/surrealql/statements/use"),
59
60 "define" => Some("https://surrealdb.com/docs/surrealql/statements/define"),
62 "define access" => Some("https://surrealdb.com/docs/surrealql/statements/define/access"),
63 "define access bearer" => {
64 Some("https://surrealdb.com/docs/surrealql/statements/define/access/bearer")
65 }
66 "define access jwt" => {
67 Some("https://surrealdb.com/docs/surrealql/statements/define/access/jwt")
68 }
69 "define access record" => {
70 Some("https://surrealdb.com/docs/surrealql/statements/define/access/record")
71 }
72 "define analyzer" | "analyzer" => {
73 Some("https://surrealdb.com/docs/surrealql/statements/define/analyzer")
74 }
75 "define api" => Some("https://surrealdb.com/docs/surrealql/statements/define/api"),
76 "define bucket" | "bucket" => {
77 Some("https://surrealdb.com/docs/surrealql/statements/define/bucket")
78 }
79 "define config" | "config" => {
80 Some("https://surrealdb.com/docs/surrealql/statements/define/config")
81 }
82 "define database" | "define db" | "database" => {
83 Some("https://surrealdb.com/docs/surrealql/statements/define/database")
84 }
85 "define event" | "event" => {
86 Some("https://surrealdb.com/docs/surrealql/statements/define/event")
87 }
88 "define field" | "field" => {
89 Some("https://surrealdb.com/docs/surrealql/statements/define/field")
90 }
91 "define function" | "function" => {
92 Some("https://surrealdb.com/docs/surrealql/statements/define/function")
93 }
94 "define index" | "index" => {
95 Some("https://surrealdb.com/docs/surrealql/statements/define/indexes")
96 }
97 "define module" | "module" => {
98 Some("https://surrealdb.com/docs/surrealql/statements/define/module")
99 }
100 "define namespace" | "define ns" | "namespace" => {
101 Some("https://surrealdb.com/docs/surrealql/statements/define/namespace")
102 }
103 "define param" => Some("https://surrealdb.com/docs/surrealql/statements/define/param"),
104 "define sequence" | "sequence" => {
105 Some("https://surrealdb.com/docs/surrealql/statements/define/sequence")
106 }
107 "define table" | "table" => {
108 Some("https://surrealdb.com/docs/surrealql/statements/define/table")
109 }
110 "define user" | "user" => {
111 Some("https://surrealdb.com/docs/surrealql/statements/define/user")
112 }
113
114 "alter" => Some("https://surrealdb.com/docs/surrealql/statements/alter"),
116 "alter database" | "alter db" => {
117 Some("https://surrealdb.com/docs/surrealql/statements/alter/database")
118 }
119 "alter field" => Some("https://surrealdb.com/docs/surrealql/statements/alter/field"),
120 "alter index" => Some("https://surrealdb.com/docs/surrealql/statements/alter/indexes"),
121 "alter namespace" | "alter ns" => {
122 Some("https://surrealdb.com/docs/surrealql/statements/alter/namespace")
123 }
124 "alter sequence" => Some("https://surrealdb.com/docs/surrealql/statements/alter/sequence"),
125 "alter system" => Some("https://surrealdb.com/docs/surrealql/statements/alter/system"),
126 "alter table" => Some("https://surrealdb.com/docs/surrealql/statements/alter/table"),
127
128 "explain clause" => Some("https://surrealdb.com/docs/surrealql/clauses/explain"),
130 "fetch" => Some("https://surrealdb.com/docs/surrealql/clauses/fetch"),
131 "from" => Some("https://surrealdb.com/docs/surrealql/clauses/from"),
132 "group by" | "group" => Some("https://surrealdb.com/docs/surrealql/clauses/group-by"),
133 "limit" => Some("https://surrealdb.com/docs/surrealql/clauses/limit"),
134 "omit" => Some("https://surrealdb.com/docs/surrealql/clauses/omit"),
135 "order by" | "order" => Some("https://surrealdb.com/docs/surrealql/clauses/order-by"),
136 "split" => Some("https://surrealdb.com/docs/surrealql/clauses/split"),
137 "where" => Some("https://surrealdb.com/docs/surrealql/clauses/where"),
138 "with" => Some("https://surrealdb.com/docs/surrealql/clauses/with"),
139
140 "array" | "arrays" => Some("https://surrealdb.com/docs/surrealql/datamodel/arrays"),
142 "bool" | "boolean" | "booleans" => {
143 Some("https://surrealdb.com/docs/surrealql/datamodel/booleans")
144 }
145 "bytes" => Some("https://surrealdb.com/docs/surrealql/datamodel/bytes"),
146 "casting" | "cast" => Some("https://surrealdb.com/docs/surrealql/datamodel/casting"),
147 "closure" | "closures" => Some("https://surrealdb.com/docs/surrealql/datamodel/closures"),
148 "datetime" | "datetimes" => {
149 Some("https://surrealdb.com/docs/surrealql/datamodel/datetimes")
150 }
151 "duration" | "durations" => {
152 Some("https://surrealdb.com/docs/surrealql/datamodel/durations")
153 }
154 "file" | "files" => Some("https://surrealdb.com/docs/surrealql/datamodel/files"),
155 "formatters" | "formatter" => {
156 Some("https://surrealdb.com/docs/surrealql/datamodel/formatters")
157 }
158 "future" | "futures" => Some("https://surrealdb.com/docs/surrealql/datamodel/futures"),
159 "geometry" | "geometries" => {
160 Some("https://surrealdb.com/docs/surrealql/datamodel/geometries")
161 }
162 "idiom" | "idioms" => Some("https://surrealdb.com/docs/surrealql/datamodel/idioms"),
163 "record id" | "record ids" | "ids" => {
164 Some("https://surrealdb.com/docs/surrealql/datamodel/ids")
165 }
166 "literal" | "literals" => Some("https://surrealdb.com/docs/surrealql/datamodel/literals"),
167 "none" | "null" | "none and null" => {
168 Some("https://surrealdb.com/docs/surrealql/datamodel/none-and-null")
169 }
170 "number" | "numbers" | "int" | "float" | "decimal" => {
171 Some("https://surrealdb.com/docs/surrealql/datamodel/numbers")
172 }
173 "object" | "objects" => Some("https://surrealdb.com/docs/surrealql/datamodel/objects"),
174 "range" | "ranges" => Some("https://surrealdb.com/docs/surrealql/datamodel/ranges"),
175 "record" | "records" | "record link" | "record links" => {
176 Some("https://surrealdb.com/docs/surrealql/datamodel/records")
177 }
178 "reference" | "references" | "record reference" | "record references" => {
179 Some("https://surrealdb.com/docs/surrealql/datamodel/references")
180 }
181 "regex" => Some("https://surrealdb.com/docs/surrealql/datamodel/regex"),
182 "set" | "sets" => Some("https://surrealdb.com/docs/surrealql/datamodel/sets"),
183 "string" | "strings" => Some("https://surrealdb.com/docs/surrealql/datamodel/strings"),
184 "uuid" | "uuids" => Some("https://surrealdb.com/docs/surrealql/datamodel/uuid"),
185 "value" | "values" => Some("https://surrealdb.com/docs/surrealql/datamodel/values"),
186 "data types" | "datamodel" => Some("https://surrealdb.com/docs/surrealql/datamodel"),
187
188 "api::" | "api functions" => {
190 Some("https://surrealdb.com/docs/surrealql/functions/database/api")
191 }
192 "array::" | "array functions" => {
193 Some("https://surrealdb.com/docs/surrealql/functions/database/array")
194 }
195 "bytes::" | "bytes functions" => {
196 Some("https://surrealdb.com/docs/surrealql/functions/database/bytes")
197 }
198 "count" | "count()" => {
199 Some("https://surrealdb.com/docs/surrealql/functions/database/count")
200 }
201 "crypto::" | "crypto functions" => {
202 Some("https://surrealdb.com/docs/surrealql/functions/database/crypto")
203 }
204 "duration::" | "duration functions" => {
205 Some("https://surrealdb.com/docs/surrealql/functions/database/duration")
206 }
207 "encoding::" | "encoding functions" => {
208 Some("https://surrealdb.com/docs/surrealql/functions/database/encoding")
209 }
210 "file::" | "file functions" => {
211 Some("https://surrealdb.com/docs/surrealql/functions/database/file")
212 }
213 "geo::" | "geo functions" => {
214 Some("https://surrealdb.com/docs/surrealql/functions/database/geo")
215 }
216 "http::" | "http functions" => {
217 Some("https://surrealdb.com/docs/surrealql/functions/database/http")
218 }
219 "math::" | "math functions" => {
220 Some("https://surrealdb.com/docs/surrealql/functions/database/math")
221 }
222 "meta::" | "meta functions" => {
223 Some("https://surrealdb.com/docs/surrealql/functions/database/meta")
224 }
225 "not()" | "not function" => {
226 Some("https://surrealdb.com/docs/surrealql/functions/database/not")
227 }
228 "object::" | "object functions" => {
229 Some("https://surrealdb.com/docs/surrealql/functions/database/object")
230 }
231 "parse::" | "parse functions" => {
232 Some("https://surrealdb.com/docs/surrealql/functions/database/parse")
233 }
234 "rand::" | "rand functions" | "rand" | "rand()" => {
235 Some("https://surrealdb.com/docs/surrealql/functions/database/rand")
236 }
237 "record::" | "record functions" => {
238 Some("https://surrealdb.com/docs/surrealql/functions/database/record")
239 }
240 "search::" | "search functions" => {
241 Some("https://surrealdb.com/docs/surrealql/functions/database/search")
242 }
243 "sequence::" | "sequence functions" => {
244 Some("https://surrealdb.com/docs/surrealql/functions/database/sequence")
245 }
246 "session::" | "session functions" => {
247 Some("https://surrealdb.com/docs/surrealql/functions/database/session")
248 }
249 "set::" | "set functions" => {
250 Some("https://surrealdb.com/docs/surrealql/functions/database/set")
251 }
252 "sleep()" | "sleep function" => {
253 Some("https://surrealdb.com/docs/surrealql/functions/database/sleep")
254 }
255 "string::" | "string functions" => {
256 Some("https://surrealdb.com/docs/surrealql/functions/database/string")
257 }
258 "time::" | "time functions" => {
259 Some("https://surrealdb.com/docs/surrealql/functions/database/time")
260 }
261 "type::" | "type functions" => {
262 Some("https://surrealdb.com/docs/surrealql/functions/database/type")
263 }
264 "value::" | "value functions" => {
265 Some("https://surrealdb.com/docs/surrealql/functions/database/value")
266 }
267 "vector::" | "vector functions" => {
268 Some("https://surrealdb.com/docs/surrealql/functions/database/vector")
269 }
270 "functions" => Some("https://surrealdb.com/docs/surrealql/functions"),
271
272 "ml" | "ml::" | "machine learning" => {
274 Some("https://surrealdb.com/docs/surrealql/functions/ml")
275 }
276 "ml functions" => Some("https://surrealdb.com/docs/surrealql/functions/ml/functions"),
277
278 "script" | "scripting" | "embedded scripting" => {
280 Some("https://surrealdb.com/docs/surrealql/functions/script")
281 }
282
283 "operators" | "operator" => Some("https://surrealdb.com/docs/surrealql/operators"),
285 "parameters" | "param" | "$param" => {
286 Some("https://surrealdb.com/docs/surrealql/parameters")
287 }
288 "comments" | "comment" => Some("https://surrealdb.com/docs/surrealql/comments"),
289 "transactions" | "transaction" => Some("https://surrealdb.com/docs/surrealql/transactions"),
290 "demo" | "demo data" => Some("https://surrealdb.com/docs/surrealql/demo"),
291 "surrealql" => Some(BASE),
292
293 _ => None,
294 }
295}
296
297const FUNCTION_NAMESPACES: &[(&str, &str)] = &[
299 (
300 "api::",
301 "https://surrealdb.com/docs/surrealql/functions/database/api",
302 ),
303 (
304 "array::",
305 "https://surrealdb.com/docs/surrealql/functions/database/array",
306 ),
307 (
308 "bytes::",
309 "https://surrealdb.com/docs/surrealql/functions/database/bytes",
310 ),
311 (
312 "crypto::",
313 "https://surrealdb.com/docs/surrealql/functions/database/crypto",
314 ),
315 (
316 "duration::",
317 "https://surrealdb.com/docs/surrealql/functions/database/duration",
318 ),
319 (
320 "encoding::",
321 "https://surrealdb.com/docs/surrealql/functions/database/encoding",
322 ),
323 (
324 "file::",
325 "https://surrealdb.com/docs/surrealql/functions/database/file",
326 ),
327 (
328 "geo::",
329 "https://surrealdb.com/docs/surrealql/functions/database/geo",
330 ),
331 (
332 "http::",
333 "https://surrealdb.com/docs/surrealql/functions/database/http",
334 ),
335 (
336 "math::",
337 "https://surrealdb.com/docs/surrealql/functions/database/math",
338 ),
339 (
340 "meta::",
341 "https://surrealdb.com/docs/surrealql/functions/database/meta",
342 ),
343 (
344 "object::",
345 "https://surrealdb.com/docs/surrealql/functions/database/object",
346 ),
347 (
348 "parse::",
349 "https://surrealdb.com/docs/surrealql/functions/database/parse",
350 ),
351 (
352 "rand::",
353 "https://surrealdb.com/docs/surrealql/functions/database/rand",
354 ),
355 (
356 "record::",
357 "https://surrealdb.com/docs/surrealql/functions/database/record",
358 ),
359 (
360 "search::",
361 "https://surrealdb.com/docs/surrealql/functions/database/search",
362 ),
363 (
364 "sequence::",
365 "https://surrealdb.com/docs/surrealql/functions/database/sequence",
366 ),
367 (
368 "session::",
369 "https://surrealdb.com/docs/surrealql/functions/database/session",
370 ),
371 (
372 "set::",
373 "https://surrealdb.com/docs/surrealql/functions/database/set",
374 ),
375 (
376 "string::",
377 "https://surrealdb.com/docs/surrealql/functions/database/string",
378 ),
379 (
380 "time::",
381 "https://surrealdb.com/docs/surrealql/functions/database/time",
382 ),
383 (
384 "type::",
385 "https://surrealdb.com/docs/surrealql/functions/database/type",
386 ),
387 (
388 "value::",
389 "https://surrealdb.com/docs/surrealql/functions/database/value",
390 ),
391 (
392 "vector::",
393 "https://surrealdb.com/docs/surrealql/functions/database/vector",
394 ),
395];
396
397const STANDALONE_FUNCTIONS: &[(&str, &str)] = &[
399 (
400 "count",
401 "https://surrealdb.com/docs/surrealql/functions/database/count",
402 ),
403 (
404 "not",
405 "https://surrealdb.com/docs/surrealql/functions/database/not",
406 ),
407 (
408 "sleep",
409 "https://surrealdb.com/docs/surrealql/functions/database/sleep",
410 ),
411 (
412 "rand",
413 "https://surrealdb.com/docs/surrealql/functions/database/rand",
414 ),
415];
416
417pub fn doc_url_for_function(name: &str) -> Option<&'static str> {
444 let lower = name.to_lowercase();
445 let trimmed = lower.trim();
446
447 for &(prefix, url) in FUNCTION_NAMESPACES {
448 if trimmed.starts_with(prefix) || trimmed == prefix.trim_end_matches("::") {
449 return Some(url);
450 }
451 }
452
453 for &(standalone, url) in STANDALONE_FUNCTIONS {
454 if trimmed == standalone {
455 return Some(url);
456 }
457 }
458
459 None
460}
461
462#[cfg(test)]
463mod tests {
464 use super::*;
465
466 #[test]
467 fn should_resolve_statement_keywords() {
468 assert_eq!(
469 doc_url("SELECT"),
470 Some("https://surrealdb.com/docs/surrealql/statements/select")
471 );
472 assert_eq!(
473 doc_url("create"),
474 Some("https://surrealdb.com/docs/surrealql/statements/create")
475 );
476 assert_eq!(
477 doc_url("UPDATE"),
478 Some("https://surrealdb.com/docs/surrealql/statements/update")
479 );
480 assert_eq!(
481 doc_url("DELETE"),
482 Some("https://surrealdb.com/docs/surrealql/statements/delete")
483 );
484 assert_eq!(
485 doc_url("INSERT"),
486 Some("https://surrealdb.com/docs/surrealql/statements/insert")
487 );
488 assert_eq!(
489 doc_url("UPSERT"),
490 Some("https://surrealdb.com/docs/surrealql/statements/upsert")
491 );
492 assert_eq!(
493 doc_url("RELATE"),
494 Some("https://surrealdb.com/docs/surrealql/statements/relate")
495 );
496 assert_eq!(
497 doc_url("LET"),
498 Some("https://surrealdb.com/docs/surrealql/statements/let")
499 );
500 assert_eq!(
501 doc_url("LIVE SELECT"),
502 Some("https://surrealdb.com/docs/surrealql/statements/live")
503 );
504 }
505
506 #[test]
507 fn should_resolve_define_variants() {
508 assert_eq!(
509 doc_url("DEFINE TABLE"),
510 Some("https://surrealdb.com/docs/surrealql/statements/define/table")
511 );
512 assert_eq!(
513 doc_url("table"),
514 Some("https://surrealdb.com/docs/surrealql/statements/define/table")
515 );
516 assert_eq!(
517 doc_url("DEFINE FIELD"),
518 Some("https://surrealdb.com/docs/surrealql/statements/define/field")
519 );
520 assert_eq!(
521 doc_url("DEFINE INDEX"),
522 Some("https://surrealdb.com/docs/surrealql/statements/define/indexes")
523 );
524 assert_eq!(
525 doc_url("DEFINE NAMESPACE"),
526 Some("https://surrealdb.com/docs/surrealql/statements/define/namespace")
527 );
528 assert_eq!(
529 doc_url("DEFINE NS"),
530 Some("https://surrealdb.com/docs/surrealql/statements/define/namespace")
531 );
532 }
533
534 #[test]
535 fn should_resolve_alter_variants() {
536 assert_eq!(
537 doc_url("ALTER TABLE"),
538 Some("https://surrealdb.com/docs/surrealql/statements/alter/table")
539 );
540 assert_eq!(
541 doc_url("ALTER DATABASE"),
542 Some("https://surrealdb.com/docs/surrealql/statements/alter/database")
543 );
544 assert_eq!(
545 doc_url("ALTER DB"),
546 Some("https://surrealdb.com/docs/surrealql/statements/alter/database")
547 );
548 assert_eq!(
549 doc_url("ALTER SYSTEM"),
550 Some("https://surrealdb.com/docs/surrealql/statements/alter/system")
551 );
552 }
553
554 #[test]
555 fn should_resolve_clauses() {
556 assert_eq!(
557 doc_url("WHERE"),
558 Some("https://surrealdb.com/docs/surrealql/clauses/where")
559 );
560 assert_eq!(
561 doc_url("ORDER BY"),
562 Some("https://surrealdb.com/docs/surrealql/clauses/order-by")
563 );
564 assert_eq!(
565 doc_url("GROUP BY"),
566 Some("https://surrealdb.com/docs/surrealql/clauses/group-by")
567 );
568 assert_eq!(
569 doc_url("LIMIT"),
570 Some("https://surrealdb.com/docs/surrealql/clauses/limit")
571 );
572 assert_eq!(
573 doc_url("FETCH"),
574 Some("https://surrealdb.com/docs/surrealql/clauses/fetch")
575 );
576 assert_eq!(
577 doc_url("SPLIT"),
578 Some("https://surrealdb.com/docs/surrealql/clauses/split")
579 );
580 }
581
582 #[test]
583 fn should_resolve_data_types() {
584 assert_eq!(
585 doc_url("string"),
586 Some("https://surrealdb.com/docs/surrealql/datamodel/strings")
587 );
588 assert_eq!(
589 doc_url("number"),
590 Some("https://surrealdb.com/docs/surrealql/datamodel/numbers")
591 );
592 assert_eq!(
593 doc_url("datetime"),
594 Some("https://surrealdb.com/docs/surrealql/datamodel/datetimes")
595 );
596 assert_eq!(
597 doc_url("uuid"),
598 Some("https://surrealdb.com/docs/surrealql/datamodel/uuid")
599 );
600 assert_eq!(
601 doc_url("geometry"),
602 Some("https://surrealdb.com/docs/surrealql/datamodel/geometries")
603 );
604 }
605
606 #[test]
607 fn should_resolve_function_namespaces_via_doc_url() {
608 assert_eq!(
609 doc_url("string::"),
610 Some("https://surrealdb.com/docs/surrealql/functions/database/string")
611 );
612 assert_eq!(
613 doc_url("array::"),
614 Some("https://surrealdb.com/docs/surrealql/functions/database/array")
615 );
616 assert_eq!(
617 doc_url("math::"),
618 Some("https://surrealdb.com/docs/surrealql/functions/database/math")
619 );
620 assert_eq!(
621 doc_url("count"),
622 Some("https://surrealdb.com/docs/surrealql/functions/database/count")
623 );
624 }
625
626 #[test]
627 fn should_resolve_specific_functions() {
628 assert_eq!(
629 doc_url_for_function("string::len"),
630 Some("https://surrealdb.com/docs/surrealql/functions/database/string")
631 );
632 assert_eq!(
633 doc_url_for_function("array::push"),
634 Some("https://surrealdb.com/docs/surrealql/functions/database/array")
635 );
636 assert_eq!(
637 doc_url_for_function("math::sum"),
638 Some("https://surrealdb.com/docs/surrealql/functions/database/math")
639 );
640 assert_eq!(
641 doc_url_for_function("crypto::md5"),
642 Some("https://surrealdb.com/docs/surrealql/functions/database/crypto")
643 );
644 assert_eq!(
645 doc_url_for_function("time::now"),
646 Some("https://surrealdb.com/docs/surrealql/functions/database/time")
647 );
648 assert_eq!(
649 doc_url_for_function("count"),
650 Some("https://surrealdb.com/docs/surrealql/functions/database/count")
651 );
652 }
653
654 #[test]
655 fn should_resolve_standalone_function_as_namespace() {
656 assert_eq!(
657 doc_url_for_function("string"),
658 Some("https://surrealdb.com/docs/surrealql/functions/database/string")
659 );
660 assert_eq!(
661 doc_url_for_function("array"),
662 Some("https://surrealdb.com/docs/surrealql/functions/database/array")
663 );
664 }
665
666 #[test]
667 fn should_return_none_for_unknown() {
668 assert_eq!(doc_url("nonexistent"), None);
669 assert_eq!(doc_url_for_function("unknown::thing"), None);
670 }
671
672 #[test]
673 fn should_not_resolve_removed_3x_statements() {
674 assert_eq!(doc_url("define scope"), None);
675 assert_eq!(doc_url("scope"), None);
676 assert_eq!(doc_url("define token"), None);
677 assert_eq!(doc_url("token"), None);
678 }
679
680 #[test]
681 fn should_be_case_insensitive() {
682 assert_eq!(doc_url("SELECT"), doc_url("select"));
683 assert_eq!(doc_url("Where"), doc_url("where"));
684 assert_eq!(
685 doc_url_for_function("STRING::LEN"),
686 doc_url_for_function("string::len")
687 );
688 }
689
690 #[test]
691 fn should_resolve_top_level_pages() {
692 assert_eq!(
693 doc_url("operators"),
694 Some("https://surrealdb.com/docs/surrealql/operators")
695 );
696 assert_eq!(
697 doc_url("parameters"),
698 Some("https://surrealdb.com/docs/surrealql/parameters")
699 );
700 assert_eq!(
701 doc_url("transactions"),
702 Some("https://surrealdb.com/docs/surrealql/transactions")
703 );
704 assert_eq!(
705 doc_url("comments"),
706 Some("https://surrealdb.com/docs/surrealql/comments")
707 );
708 }
709}