View Single Post
08-31-16, 08:22 AM   #2
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Even setting aside the conceptual flaws (your code is way more complicated than it needs to be to do what it does) there are several basic issues with your code that make it pretty unsuitable as an example of how anything should be done.

Lua Code:
  1. Tooltip = Tooltip or {};

This creates a global variable named "Tooltip". You say you know this, yet you did it anyway. This is 100% bad and you should never do it for any reason. Doing it in something you're calling an example for others to use is even worse than doing it in code for yourself.

Lua Code:
  1. Tooltip._tooltip = 'Tooltip._tooltip';
  2. Tooltip._tooltip_frame = CreateFrame('GameTooltip', Tooltip._tooltip, nil, 'GameTooltipTemplate');

This creates a global variable named "Tooltip._tooltip" which, though slightly less bad than a global "Tooltip", is still not good. Global variables should always follow two simple rules:

1. It should be unique, so there is no chance of it colliding with another badly named or accidentally leaked global. At best, global variable collision will make an addon break. At worst, it will break the entire UI and make the game unplayable.

2. It should clearly identify the origin (ie. what addon created it) and purpose of the value it contains, so if it shows up in an error message, stack trace, /framestack tooltip, or other debugging context, there is some hope of the user figuring out where it's coming from.

Lua Code:
  1. Tooltip.GetTooltip = Tooltip.GetTooltip or function(itemLink)

Since this code is running in the main chunk of your addon, it's only ever executed once. There will never already be a "GetTooltip" method on your "Tooltip" object, so there's no point in checking for one before defining it.

Lua Code:
  1. Tooltip.GetSpellDuration = Tooltip.GetSpellDuration or function(itemNameORID)

Lua Code:
  1. Tooltip.GetUnitAuraPandemic = Tooltip.GetUnitAuraPandemic or function(unitID, itemName, rank, filter)

Same as above. No reason to check for things that you already know don't exist.

Lua Code:
  1. if not text then break end;

While this won't break anything in the context of scanning an aura tooltip, it's also not necessary in that context -- if tooltip:NumLines() is 3, then the tooltip has 3 lines with text; you don't need to verify that there's text -- and will break scanning in other types of tooltips, since item tooltips, for example, can have empty lines in the middle of them.

Lua Code:
  1. return nil;

Writing this at the end of a function does absolutely nothing, and there's no reason to write it. It just takes up space for no reason.
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.

Last edited by Phanx : 08-31-16 at 08:26 AM.
  Reply With Quote