Source

ocamlspot / dotfile.ml

camlspotter fb1f10e 

camlspotter d0e75b7 
camlspotter fb1f10e 


camlspotter d0e75b7 
camlspotter fb1f10e 














camlspotter bbf1990 

camlspotter fb1f10e 


camlspotter bbf1990 
camlspotter fb1f10e 























camlspotter 2c7e1b1 
camlspotter fb1f10e 









camlspotter 2c7e1b1 

camlspotter fb1f10e 









(***********************************************************************)
(*                                                                     *)
(*                            OCamlSpotter                             *)
(*                                                                     *)
(*                             Jun FURUSE                              *)
(*                                                                     *)
(*   Copyright 2008-2012 Jun Furuse. All rights reserved.              *)
(*   This file is distributed under the terms of the GNU Library       *)
(*   General Public License, with the special exception on linking     *)
(*   described in file LICENSE.                                        *)
(*                                                                     *)
(***********************************************************************)

(* module for .ocamlspot file 

   build_dir: dirname

      Work around for ocamlbuild. If .ocamlspot is placed in a directory $DIR,
      then spot files of source files under $DIR ex. $DIR/subdir/source.ml
      is searched in $DIR/dirname/subdir/.
*)

open Utils

let name = ".ocamlspot"

let rec find absdir =
  let path = absdir ^/ name in
  if Sys.file_exists path then Some (absdir, path)
  else if absdir = "/" then None
  else find (Filename.dirname absdir)
;;

type t = {
  build_dir : string option;
}

(* very strict .ini file style format *)
let split_by_equal s =
  try
    let pos = String.index s '=' in
    let key = String.sub s 0 pos in
    let value = String.sub s (pos+1) (String.length s - pos - 1) in
    key, Some value
  with
  | Not_found -> s, None
;;

let load s =
  let build_dir = ref None in
  let set name ref v =
    match !ref with
    | Some _ -> failwithf "key %s is defined twice" name
    | None -> ref := Some v
  in
  let ic = open_in s in
  let rec load () =
    let line = input_line ic in
    let key, value = split_by_equal line in
    match key, value with
    | "build_dir", Some s -> 
        set "build_dir" build_dir s;
        load ()
    | "build_dir", None -> failwithf "key %S must have a value" key
    | key, _ -> failwithf "unknown key %S" key
  in
  try load () with End_of_file ->
    close_in ic;
    { build_dir = !build_dir }
;;

let find_and_load absdir =
  match find absdir with
  | None -> None
  | Some (dir, path) -> Some (dir, load path)
;;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.