anchor.diff:  get_source_id(Source) ->
       lists:flatten([io_lib:format("~.16b",[N])
               || N <-binary_to_list(crypto:md5(Source))]).
  +
  +remove_function_name(Source) ->
  +    re:replace(Source, "^\s*function\s+[^(]*", "function ", [ multiline, caseless, {return, binary}]).
  +
  
positive.code:         undefined ->
              process_macros_fun(Rest, Obj, Objects, Doc, AppDir);
          Source when is_binary(Source) ->
              ?DEBUG("process function ~p~n", [Prop]),
              Source1 = apply_macros(Source, Doc, AppDir),
              Obj1 = couchbeam_doc:set_value(Prop, Source1, Obj),
              Objects1 = if Source =/= Source1 ->
                      SourceId = get_source_id(Source1),
  
negative.code: 
  process_macros(Doc, AppDir) ->
      Funs = [<<"shows">>, <<"lists">>, <<"updates">>, <<"filters">>,
          <<"spatial">>, <<"validate_doc_update">>],
      %% apply macros too functions
      {Doc1, Objects} = process_macros_fun(Funs, Doc, [], Doc, AppDir),
      {Doc2, FinalObjects} = case couchbeam_doc:get_value(<<"views">>, Doc1) of
  