summaryrefslogtreecommitdiffstats
path: root/ocamldoc/odoc_search.ml
diff options
context:
space:
mode:
authorDamien Doligez <damien.doligez-inria.fr>2012-07-26 19:21:54 +0000
committerDamien Doligez <damien.doligez-inria.fr>2012-07-26 19:21:54 +0000
commit0c3a7de5079529bc99cbc9e68806f1a7021d94ef (patch)
tree3b973b6db6313c9bb2993b77c925c0dc8b457f7a /ocamldoc/odoc_search.ml
parent229044d83a940d855fd9590d9aa76596f8c1a8b9 (diff)
merge changes from 4.00 branching to 4.00.0 (part 1)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12784 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'ocamldoc/odoc_search.ml')
-rw-r--r--ocamldoc/odoc_search.ml71
1 files changed, 59 insertions, 12 deletions
diff --git a/ocamldoc/odoc_search.ml b/ocamldoc/odoc_search.ml
index 65d602d3b..91b1d13c8 100644
--- a/ocamldoc/odoc_search.ml
+++ b/ocamldoc/odoc_search.ml
@@ -32,6 +32,8 @@ type result_element =
| Res_attribute of t_attribute
| Res_method of t_method
| Res_section of string * Odoc_types.text
+ | Res_recfield of t_type * record_field
+ | Res_const of t_type * variant_constructor
type result = result_element list
@@ -43,7 +45,9 @@ module type Predicates =
val p_class : t_class -> t -> bool * bool
val p_class_type : t_class_type -> t -> bool * bool
val p_value : t_value -> t -> bool
- val p_type : t_type -> t -> bool
+ val p_recfield : t_type -> record_field -> t -> bool
+ val p_const : t_type -> variant_constructor -> t -> bool
+ val p_type : t_type -> t -> (bool * bool)
val p_exception : t_exception -> t -> bool
val p_attribute : t_attribute -> t -> bool
val p_method : t_method -> t -> bool
@@ -92,7 +96,26 @@ module Search =
let search_value va v = if P.p_value va v then [Res_value va] else []
- let search_type t v = if P.p_type t v then [Res_type t] else []
+ let search_recfield t f v =
+ if P.p_recfield t f v then [Res_recfield (t,f)] else []
+
+ let search_const t f v =
+ if P.p_const t f v then [Res_const (t,f)] else []
+
+ let search_type t v =
+ let (go_deeper, ok) = P.p_type t v in
+ let l =
+ match go_deeper with
+ false -> []
+ | true ->
+ match t.ty_kind with
+ Type_abstract -> []
+ | Type_record l ->
+ List.flatten (List.map (fun rf -> search_recfield t rf v) l)
+ | Type_variant l ->
+ List.flatten (List.map (fun rf -> search_const t rf v) l)
+ in
+ if ok then (Res_type t) :: l else l
let search_exception e v = if P.p_exception e v then [Res_exception e] else []
@@ -305,7 +328,13 @@ module P_name =
let p_class c r = (true, c.cl_name =~ r)
let p_class_type ct r = (true, ct.clt_name =~ r)
let p_value v r = v.val_name =~ r
- let p_type t r = t.ty_name =~ r
+ let p_recfield t f r =
+ let name = Printf.sprintf "%s.%s" t.ty_name f.rf_name in
+ name =~ r
+ let p_const t f r =
+ let name = Printf.sprintf "%s.%s" t.ty_name f.vc_name in
+ name =~ r
+ let p_type t r = (true, t.ty_name =~ r)
let p_exception e r = e.ex_name =~ r
let p_attribute a r = a.att_value.val_name =~ r
let p_method m r = m.met_value.val_name =~ r
@@ -322,7 +351,9 @@ module P_values =
let p_class _ _ = (false, false)
let p_class_type _ _ = (false, false)
let p_value _ _ = true
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = false
let p_attribute _ _ = false
let p_method _ _ = false
@@ -347,7 +378,9 @@ module P_exceptions =
let p_class _ _ = (false, false)
let p_class_type _ _ = (false, false)
let p_value _ _ = false
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = true
let p_attribute _ _ = false
let p_method _ _ = false
@@ -372,7 +405,9 @@ module P_types =
let p_class _ _ = (false, false)
let p_class_type _ _ = (false, false)
let p_value _ _ = false
- let p_type _ _ = true
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, true)
let p_exception _ _ = false
let p_attribute _ _ = false
let p_method _ _ = false
@@ -397,7 +432,9 @@ module P_attributes =
let p_class _ _ = (true, false)
let p_class_type _ _ = (true, false)
let p_value _ _ = false
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = false
let p_attribute _ _ = true
let p_method _ _ = false
@@ -422,7 +459,9 @@ module P_methods =
let p_class _ _ = (true, false)
let p_class_type _ _ = (true, false)
let p_value _ _ = false
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = false
let p_attribute _ _ = false
let p_method _ _ = true
@@ -447,7 +486,9 @@ module P_classes =
let p_class _ _ = (false, true)
let p_class_type _ _ = (false, false)
let p_value _ _ = false
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = false
let p_attribute _ _ = false
let p_method _ _ = false
@@ -472,7 +513,9 @@ module P_class_types =
let p_class _ _ = (false, false)
let p_class_type _ _ = (false, true)
let p_value _ _ = false
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = false
let p_attribute _ _ = false
let p_method _ _ = false
@@ -497,7 +540,9 @@ module P_modules =
let p_class _ _ = (false, false)
let p_class_type _ _ = (false, false)
let p_value _ _ = false
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = false
let p_attribute _ _ = false
let p_method _ _ = false
@@ -522,7 +567,9 @@ module P_module_types =
let p_class _ _ = (false, false)
let p_class_type _ _ = (false, false)
let p_value _ _ = false
- let p_type _ _ = false
+ let p_recfield _ _ _ = false
+ let p_const _ _ _ = false
+ let p_type _ _ = (false, false)
let p_exception _ _ = false
let p_attribute _ _ = false
let p_method _ _ = false