Skip to content

Instantly share code, notes, and snippets.

@dmpv
Created November 20, 2016 20:59
Show Gist options
  • Save dmpv/7bab3e70b1230936da199ae99d6ba14f to your computer and use it in GitHub Desktop.
Save dmpv/7bab3e70b1230936da199ae99d6ba14f to your computer and use it in GitHub Desktop.
FBTweaks Autocompletion/Typechecking Tools

##Primary Way

#define str_mk(name, ...) _##name; struct { char __VA_ARGS__; } name; char __##name
#define _(name, ...) char str_mk(name, ##__VA_ARGS__);
#define __(name, ...) str_mk(name, ##__VA_ARGS__)
#define ___(name, ...) str_mk(name, ##__VA_ARGS__)
#define ____(name) str_mk(name, dummy)

_(OTTDefaultTweakLib,
  
  __(CommonAnimations,
     
     ___(Appear,
         
         ____(Duration),
         ____(Damping)
         
         ),
     
     ___(Disappear,
         
         ____(Duration),
         ____(Damping)
         
         )
     ),
  
  __(Network,
     
     ___(Trains,
         
         ____(Host)
         
         ),
     
     ___(Avia,
         
         ____(TestPurchase),
         ____(NonProdData)
         
         )
     )
  )

#undef str_mk
#undef _
#undef __
#undef ___
#undef ____

##Alternative Way

#define struct_prefix(name) struct {} name##_; struct
#define lib(name) struct_prefix(name)
#define cat(name) struct_prefix(name)
#define col(name) struct_prefix(name)
#define ___(name) name;
#define tweak(name) void *name##_, *name;

lib(OTTDefaultTweakLib)
{
  cat(CommonAnimations)
  {
    col(Appear)
    {
      tweak(Duration)
    }
    ___(Appear)
  }
  ___(CommonAnimations)
  
  cat(MenuScreen)
  {
    col(Buttons)
    {
      tweak(isHidden)
      tweak(animated)
      tweak(wat)
    }
    ___(Buttons)
  }
  ___(MenuScreen)
  
  cat(
}
___(OTTDefaultTweakLib)

#undef lib
#undef cat
#undef col
#undef ___
#undef tweak
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment